国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32入門——三種編寫跑馬燈程序的方法

這篇具有很好參考價(jià)值的文章主要介紹了STM32入門——三種編寫跑馬燈程序的方法。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

本文分別通過庫函數(shù)、寄存器以及位操作完成跑馬燈實(shí)驗(yàn),使用的開發(fā)板是正點(diǎn)原子的min核心板。

一、庫函數(shù)

1.1?硬件連接

圖1?LED 與 STM32 連接原理圖

stm32跑馬燈,從零開始STM32學(xué)習(xí)之路,stm32,嵌入式硬件,單片機(jī)

?通過min板的原理圖可以看出兩個(gè)LED燈分別接到PD2和PA8引腳,并且LED燈是共陽極,當(dāng)IO口輸出高電平,LED滅;輸出低電平,LED亮。

在實(shí)際的程序編程中我們需要用到GPIO文件也就是stm32f10x_gpio.h和stm32f10x_gpio.c,來操作對應(yīng)IO口。同時(shí)我們需要設(shè)置時(shí)鐘就要用到stm32f10x_rcc.c與其頭文件進(jìn)行時(shí)鐘使能。

1.2 GPIO庫函數(shù)介紹

  • 重要函數(shù)

1個(gè)初始化函數(shù):

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

主要用途是用來初始化GPIO口的狀態(tài)

第一個(gè)參數(shù)是一個(gè)結(jié)構(gòu)體類型變量,指定哪組IO口,第二個(gè)同樣是一個(gè)結(jié)構(gòu)體類型變量,它共有三個(gè)變量,第一個(gè)指定哪個(gè)IO口,第二個(gè)指定速度,第三個(gè)指定Mode模式。

GPIO_Init函數(shù)初始化樣例:

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;        //LED0-->PB.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度為50MHz
GPIO_Init(GPIOB,&GPIO_InitStructure);            //根據(jù)設(shè)定參數(shù)初始化為GPIOB.5

2個(gè)讀取輸入電平函數(shù):

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, unit16_t GPIO_Pin);

作用:讀取某個(gè)GPIO的輸入電平。實(shí)際操作的是GPIOx_IDR寄存器。

例如:

GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5);//讀取GPIOA.5的輸入電平

uint16_t GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

作用:讀取某個(gè)GPIO的輸入電平。實(shí)際操作的是GPIOx_IDR寄存器

例如:

GPIO_ReadInputData(GPIOA);//讀取GPIOA組中所有io口輸入電平

2個(gè)讀取輸出電平函數(shù):

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

上面兩個(gè)函數(shù)的作用與讀取輸入電平大致相同,不同處在于這里讀取的是某組或某個(gè)GPIO的輸出電平。實(shí)際操作的是GPIO_ODR寄存器。

4個(gè)設(shè)置輸出電平函數(shù):

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

作用:設(shè)置某個(gè)IO口輸出為高電平(1)。實(shí)際操作BSRR寄存器。
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

作用:設(shè)置某個(gè)IO口輸出為低電平(0)。實(shí)際操作BRR寄存器。
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

這兩個(gè)函數(shù)不常用,也是用來設(shè)置IO口輸出電平。

所有的函數(shù)都是在主函數(shù)中設(shè)置寄存器的值,例如SetBits使用了BSRR,ResetBit使用了BRR寄存器。

1.3 跑馬燈程序

庫函數(shù)——步驟:

  • 使能IO口時(shí)鐘。調(diào)用函數(shù)RCC_APB2PeriphColckCmd();? ? ? ?

????????不同的IO組,調(diào)用的始終使能函數(shù)不一樣。

  • 初始化IO口模式。調(diào)用函數(shù)GPIO_Init();
  • 操作IO口,輸出高低電平。

? ? ? ? GPIO_SetBits();

? ? ? ? GPIO_ResetBits();

注意:操作IO口之前,必須使能對應(yīng)的時(shí)鐘位。

在項(xiàng)目中新建一個(gè)HAREWARE文件夾,在其中新建程序文件夾,創(chuàng)建對應(yīng)c文件與頭文件,例如led.h與LED.c,在led.h頭文件中定義LED_Init函數(shù)。

注意這里需要將對應(yīng)頭文件路徑加入項(xiàng)目中來。以下是本次程序LED.c的代碼內(nèi)容,實(shí)現(xiàn)兩個(gè)LED燈初始化。

stm32跑馬燈,從零開始STM32學(xué)習(xí)之路,stm32,嵌入式硬件,單片機(jī)

?接下來在USER文件夾中編寫main函數(shù),

stm32跑馬燈,從零開始STM32學(xué)習(xí)之路,stm32,嵌入式硬件,單片機(jī)

?編寫完后利用flymcu燒錄至開發(fā)板中,兩個(gè)LED燈將同時(shí)點(diǎn)亮,間隔500毫秒后又同時(shí)熄滅,循環(huán)往復(fù)。

二、寄存器

2.1 硬件連接

連接如庫函數(shù)。

2.2 跑馬燈程序

寄存器——步驟:

  • 使能IO口時(shí)鐘。配置寄存器RCC_APB2ENR;
  • 初始化IO口模式。配置寄存器GPIOx_CRH/CRL;
  • 操作IO口,輸出高低電平。配置寄存器GPIOX_ODR或者BSRR/BRR。

2.2.1 使能IO口時(shí)鐘

stm32跑馬燈,從零開始STM32學(xué)習(xí)之路,stm32,嵌入式硬件,單片機(jī)

?stm32跑馬燈,從零開始STM32學(xué)習(xí)之路,stm32,嵌入式硬件,單片機(jī)

?mini板的LED引腳分別為PA8和PD2,所以選擇配置寄存器RCC_APB2ENR的位5和位2如上面原理圖所示。

同樣在項(xiàng)目中新建HAREWARE文件夾,其余操作步驟如庫函數(shù),在led.h頭文件中定義LED_Init函數(shù),首先我們需要操作RCC寄存器,它的定義在stm23f10x.h中,可以看到定義中使用RCC結(jié)構(gòu)體指針定義了所有寄存器,在代碼中我們將RCC指向APB2ENR來操作寄存器。

stm32跑馬燈,從零開始STM32學(xué)習(xí)之路,stm32,嵌入式硬件,單片機(jī)

2.2.2 初始化IO口模式

?接下來操作端口配置寄存器,我們需要用GPIOx結(jié)構(gòu)體指針指向該寄存器,配置為通用推挽輸出模式,最大速度50MHz,對應(yīng)到寄存器的每一個(gè)位是0011B,實(shí)際代碼中先將對應(yīng)位清零再進(jìn)行配置,調(diào)用GPIOx的ODR寄存器,拉高需要操作的相應(yīng)位。

stm32跑馬燈,從零開始STM32學(xué)習(xí)之路,stm32,嵌入式硬件,單片機(jī)

2.2.3 操作IO口

?main.c里面把stm32f10x.h、delay.h、led.h頭文件包含進(jìn)來,主函數(shù)中調(diào)用delay_init和LED_Init初始化函數(shù),隨后進(jìn)入while死循環(huán),在死循環(huán)中同樣可以直接用ODR寄存器對LED進(jìn)行操作。

?stm32跑馬燈,從零開始STM32學(xué)習(xí)之路,stm32,嵌入式硬件,單片機(jī)

?程序編寫完畢后燒錄至開發(fā)板實(shí)現(xiàn)跑馬燈功能。

三、位操作

3.1 位操作基本原理

位操作原理:

把每個(gè)比特膨脹為一個(gè)32位的字,當(dāng)訪問這些字的時(shí)候就達(dá)到了訪問比特的目的,比如說BSRR寄存器有32個(gè)位,那么可以映射到32個(gè)地址上,我們?nèi)ピL問(讀-改-寫)這32個(gè)地址就達(dá)到訪問32個(gè)比特的目的。

哪些區(qū)域支持位操作:

stm32跑馬燈,從零開始STM32學(xué)習(xí)之路,stm32,嵌入式硬件,單片機(jī)

?stm32跑馬燈,從零開始STM32學(xué)習(xí)之路,stm32,嵌入式硬件,單片機(jī)

?由于位帶區(qū)一個(gè)位對應(yīng)32位的地址,所以位帶區(qū)1MB對應(yīng)別名區(qū)32MB。

stm32跑馬燈,從零開始STM32學(xué)習(xí)之路,stm32,嵌入式硬件,單片機(jī)

?映射關(guān)系:

  • 位帶區(qū):支持位帶操作的地址區(qū)

  • 位帶別名:對別名地址的訪問最終作用到位帶區(qū)的訪問上

stm32跑馬燈,從零開始STM32學(xué)習(xí)之路,stm32,嵌入式硬件,單片機(jī)

3.2 硬件連接

硬件連接與前兩個(gè)方法相同。

3.3?跑馬燈程序

具體的代碼實(shí)現(xiàn)里面,實(shí)際上運(yùn)用的就是映射關(guān)系,比如要操作PA,就會(huì)宏定義一個(gè)PAout()函數(shù),他的原理實(shí)際上就是在操作ODR寄存器,相應(yīng)的,PAin()函數(shù)就是操作IDR寄存器,所有方法的最終原理都是操作寄存器,這是永恒不變的。

//IO口地址映射
#define GPIOA_ODR_Addr    (GPIOA_BASE+12)    //0x4001080c

//IO口操作,針對單一IO口
#define PAout(n)    BIT_ADDR(GPIOA_ODR_Addr,n)    //輸出
#define PAin(n)     BIT_ADDR(GPIOA_IDR_Addr,n)    //輸入

位操作——步驟:

  • 使能IO口時(shí)鐘。調(diào)用函數(shù)RCC_APB2PeriphColckCmd();
  • 初始化IO口模式。調(diào)用函數(shù)GPIO_Init();
  • 操作IO口,輸出高低電平。使用位帶操作

大體上位操作的步驟和庫函數(shù)相同,其使用的模板與庫函數(shù)相同。

3.3.1 使能IO口時(shí)鐘

與庫函數(shù)版本程序代碼相同。

3.3.2 初始化IO口模式

與庫函數(shù)版本程序代碼相同。

3.3.3 操作IO口

stm32跑馬燈,從零開始STM32學(xué)習(xí)之路,stm32,嵌入式硬件,單片機(jī)

在這里只需要通過宏定義的位帶函數(shù)操作LED燈即可。文章來源地址http://www.zghlxwxcb.cn/news/detail-740455.html

到了這里,關(guān)于STM32入門——三種編寫跑馬燈程序的方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32F407ZGT6正點(diǎn)原子F4探索者開發(fā)板 -- 跑馬燈例程

    STM32F407ZGT6正點(diǎn)原子F4探索者開發(fā)板 -- 跑馬燈例程

    LED0 - PF9 LED1 - PF10 PF9 = 0, LED0 亮,PF9 = 1,LED0 滅 PF10 = 0, LED1 亮,PF10 = 1,LED1 滅

    2024年02月15日
    瀏覽(33)
  • uni小程序 跑馬燈效果

    寫在前面 前幾天幫一個(gè)朋友咋小程序上加一個(gè)類似于跑馬燈的效果,本自己手寫了一個(gè)。(代碼和截圖都在下方) 效果展示 等我截圖~~~ 代碼展示(布局代碼) 主要就是圖片css哪里加了一個(gè)“ flex-shrink: 0; ”,因?yàn)橹皇潜镜氐囊粋€(gè)功能,所以我就圖片數(shù)據(jù)就寫死了,需要的自

    2024年02月12日
    瀏覽(25)
  • 單片機(jī)(3)跑馬燈,按鈕控制的跑馬燈(2種編程)

    單片機(jī)(3)跑馬燈,按鈕控制的跑馬燈(2種編程)

    ?先上電路圖(圖示的是高電平點(diǎn)亮的跑馬燈) ?這個(gè)是程序截圖(keil5):我的建議是是先自己打一遍,邊打邊試著理解程序的意思。 下面的是沒有注釋的代碼 下一個(gè)是另外一種編程思路 ?

    2024年02月11日
    瀏覽(27)
  • 20230705點(diǎn)亮STC32G實(shí)驗(yàn)箱9.6(STC32G12K128)開發(fā)板的跑馬燈LED(深入了解)

    20230705點(diǎn)亮STC32G實(shí)驗(yàn)箱9.6(STC32G12K128)開發(fā)板的跑馬燈LED(深入了解)

    08第六集:LED閃爍第六集:LED閃爍和花式點(diǎn)燈上和花式點(diǎn)燈上.mp4 09第六集:LED閃爍和花式點(diǎn)燈下.mp4 【大文哥學(xué)習(xí)32位8051】20230704【沖哥視頻】第六集的晶振時(shí)鐘的學(xué)習(xí)困惑 2023/7/5 17:36 delay_ms(3000); 刷機(jī)的時(shí)候如果使用11.0592M的Fosc,3秒鐘的延遲大概7秒鐘。 刷機(jī)的時(shí)候如果使用

    2024年02月12日
    瀏覽(98)
  • 3.跑馬燈

    3.跑馬燈

    推挽模式輸出:因?yàn)長ED0和LED1陽極都是3.3V,需要將陰極設(shè)置為低電平才可以點(diǎn)亮LED; 操作io口時(shí),必須引入源文件和頭文件; 關(guān)于時(shí)鐘的文件存放在rcc中; void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); 作用:初始化一個(gè)或多個(gè)io口(同一組)的工作方式和速度, 該函數(shù)

    2024年02月10日
    瀏覽(23)
  • Android --- 跑馬燈效果

    Android --- 跑馬燈效果

    跑馬燈效果主要使用的控件為TextView,其中涉及的幾個(gè)標(biāo)簽如下所示: android:ellipsize If set, causes words that are longer than the view is wide to be ellipsized instead of broken in the middle. You will often also want to set scrollHorizontally or singleLine as well so that the text as a whole is also constrained to a single line in

    2023年04月08日
    瀏覽(25)
  • 跑馬燈實(shí)驗(yàn)

    跑馬燈實(shí)驗(yàn)

    ???????? 1.熟悉龍芯實(shí)驗(yàn)開發(fā)板、熟悉 VIVADO 的編譯環(huán)境及操作流程。 ????????2.掌握 FPGA 編程入門知識、利用門級方法實(shí)現(xiàn)簡單邏輯電路。 ????????3.繼續(xù)學(xué)習(xí) Verilog HDL 語法、掌握跑馬燈的設(shè)計(jì)、熟悉調(diào)試過程。 ???????? 本次實(shí)驗(yàn)用 Verilog HDL 語言來描述 6 個(gè)不

    2024年02月04日
    瀏覽(27)
  • CSS按鈕-跑馬燈邊框

    CSS按鈕-跑馬燈邊框

    思路很簡單,實(shí)現(xiàn)方法有很多很多。但是大體思路與實(shí)現(xiàn)方法都類似:漸變色 + 動(dòng)畫,主要區(qū)別在動(dòng)畫的具體實(shí)現(xiàn)

    2024年02月11日
    瀏覽(32)
  • CSS 之 跑馬燈邊框

    CSS 之 跑馬燈邊框

    一、簡介 ? 之前有做過漸變色邊框的樣式,然后某天刷抖??,看到某個(gè)老師在講跑馬燈的樣式效果,于是就自己嘗試實(shí)現(xiàn)一下跑馬燈樣式的邊框,雖然這種樣式并不常見(基本沒卵用),其使用場景我至今沒想到,但是它足夠花里胡哨,玩的就是花活。CSS才是前端最難精通

    2024年01月17日
    瀏覽(27)
  • Android 實(shí)現(xiàn)跑馬燈效果

    Android中實(shí)現(xiàn)跑馬燈效果有多種方式,本篇簡單介紹下: 1: TextView屬性實(shí)現(xiàn) 這里需要注意下: 需要限制textview的寬度,不能設(shè)置為wrap_content 啟動(dòng)跑馬燈效果需要獲取焦點(diǎn)requestFocus(). 2: 代碼實(shí)現(xiàn) 3: 自定義 view實(shí)現(xiàn) 這里可以使用動(dòng)畫的效果實(shí)現(xiàn). 4: 實(shí)現(xiàn)豎直效果的跑馬燈

    2024年01月18日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包