02 STM32 跑馬燈配置

2022-07-25 19:54:10 字數 2683 閱讀 6321

#ifndef _led_h

#define _led_h

#include "sys.h"

#define led0 pbout(5) // ds0

#define led1 peout(5) // ds1

void led_init(void); // led介面初始化

#endif

這段**裡面最關鍵就是 2 個巨集定義,通過位帶操作 pb5 輸出高低電平從而控制 led0 。

led0=1; //通過位帶操作控制 led0 的引腳 pb5 輸出高電平

led0=0; //通過位帶操作控制 led0 的引腳 pb5 輸出低電平

同樣也可以使用韌體庫操作和暫存器操作,來實現 io 口操作。

gpio_setbits(gpiob, gpio_pin_5); //設定 gpiob.5 輸出 1,等同 led0=1;

gpio_resetbits (gpiob, gpio_pin_5); //設定 gpiob.5 輸出 0,等同 led0=0;

還可以通過直接操作暫存器,brr 和 bsrr 的方式來操作 io 口輸出高低電平。

gpiob->brr=gpio_pin_5; //設定 gpiob.5 輸出 1,等同 led0=1;

gpiob->bsrr=gpio_pin_5; //設定 gpiob.5 輸出 0,等同 led0=0;

#include "led.h"

void led_init(void)

該函式的功能就是用來實現配置 pb5和 pe5 為推挽輸出。這裡需要注意的是:在配置 stm32 外設的時候,任何時候都要先使能該外設的時鐘。gpio 是掛載在 apb2 匯流排上的外設,在韌體庫中對掛載在 apb2 匯流排上的外設時鐘使能是通過函式 rcc_apb2periphclockcmd()來實現的。

需要說明的是,因為 gpiob 和 gpioe 的 io 口的初始化引數都是設定在結構體變數gpio_initstructure 中,因為兩個 io 口的模式和速度都一樣,所以我們只用初始化一次,在gpioe.5 的初始化的時候就不需再重複初始化速度和模式了。

#include "led.h"

#include "delay.h"

int main(void)

}

在韌體庫 v3.5 中,系統在啟動的時候會呼叫 system_stm32f10x.c 中的函式 systeminit()對系統時鐘進行初始化,完畢之後會呼叫 main()函式,所以我們不需要再在 main()函式中呼叫 systeminit()函式。

將startup_stm32f10x_hd.s的 reset_handler 函式部分**進行注釋,因為暫存器版本沒有用到systeminit函式,引用的話可能會報錯。

reset_handler   proc

export reset_handler [weak]

import __main

;暫存器版本**,因為沒有用到systeminit函式,所以注釋掉以下**為防止報錯!

;庫函式版本**,建議加上這裡(外部必須實現systeminit函式),以初始化stm32時鐘等。

;import systeminit

;ldr r0, =systeminit

;blx r0

ldr r0, =__main

bx r0

endp

#ifndef _led_h

#define _led_h

#include "sys.h"

#define led0 pbout(5) //ds0

#define led1 peout(5) //ds1

void led_init(void);

#endif

#include "led.h"

void led_init(void)

首先要將portb 和 porte 的時鐘使能,再設定埠管腳模式。apb2enr 是 apb2 匯流排上的外設時鐘使能暫存器,通過將位3和位6設為1,即可使能portb和porte時鐘。

下步準備設定埠模式,由下圖可以看出gpio_pin_5為crl暫存器的20~23位,將該位清零設定為3。(推挽輸出、50mhz)

}這段main 函式先呼叫 stm32_clock_init 函式,配置系統時鐘為 9 倍頻,也就是 8*9=72m(外部晶振是 8mhz),然後呼叫 delay_init 函式,初始化延時函式。接著就是呼叫 led_init 來初始化 pe5 和 pb5 為輸出。最後在死迴圈裡面實現 led0 和 led1 交替閃爍,間隔為 300ms。

STM32跑馬燈配置流程

目錄 跑馬燈配置流程 戰艦開發板v3 led的初始化 相應功能引腳的確定 確保在檔案中新增了相應庫檔案 先建立led硬體初始化檔案並新增進專案工程中 在建立好的檔案中編寫初始化led硬體的程式 編寫main函式 函式介紹 外圍裝置時鐘使能函式 rcc apb2periphclockcmd 引腳狀態設...

STM32跑馬燈實驗

本次跑馬燈實驗主要用到pb6 pb9幾個埠 include led.h void led init void 自定義led燈初始化函式 標頭檔案中主要是一些巨集定義和位帶操作 ifndef led h define led h include stm32f10x.h define led1 on g...

stm32跑馬燈實驗

本文記錄stm32mini開發板實驗 普通跑馬燈 回歸gpio基礎知識 每組io口含有下面7個暫存器,7個暫存器一共可以控制一組gpio的16個io口。gpiox crl 埠配置低暫存器 gpiox crh 埠配置高暫存器 gpiox idr 埠輸入暫存器 gpiox odr 埠輸出暫存器 gpio...