STM32學習中遇到的問題 1 跑馬燈的實現

2021-07-14 00:14:17 字數 1692 閱讀 7416

基於正點原子mini開發板  stm32f103rct6

基礎幾乎為零,從頭開始學起。

主要要自己進行編寫的有,main.c,led.c,led.h

首先寫led.h  這一部分為led.c的標頭檔案,必不可少,**很短

#ifndef _led_h

#define _led_h

void led_init(void);

#endif

其中led_init為自己定義的函式名。

然後寫led.c 主要是一些定義、初始化

#include "led.h"

#include "stm32f10x.h"

void led_init(void)

都還比較好理解,注意不要忘記#include 「stm32f10x.h」,如果沒有加這句,在後面的編寫中會有很多錯誤,因為gpio_inittypedef ,rcc_apb2periphclockcmd這些函式名都在stm32f10x.h中。

還要注意每個函式名的書寫,有大小寫的區別,例如gpio_mode_out_pp,設定為推挽輸出,其中pp為大寫。當然,這些都可以直接複製貼上= =,只要通過go to definition檢視對應函式即可。

最後便是main.c  為應用程式**,即實現功能作用

#include "stm32f10x.h"

#include "led.h"

#include "delay.h"

int main(void)

}

delay為正點原子教程中帶的乙個已經編寫好了的延時程式,新增之後可以直接使用。

gpio_setbits即將對應的io口置1

gpio_resetbits則為置0

注意函式名的書寫,剛開始沒注意大小寫沒對上就錯誤了。

編寫完成之後,編譯出現了乙個錯誤

..\system\delay\delay.c(130): error:  #20: identifier "systick_clksource_hclk_div8" is undefined

問了度娘之後,解決辦法為:在delay.c中新增一句**:#include "misc.h"

燈怎麼亮需要看對應的硬體圖,如果led一端接io口,另一端拉高,那麼io口輸出低電平的時候就會亮;如果另一端接地,那麼輸出高電平時候會亮。

在自己建立工程模板的時候要細心,每乙個資料夾都不能缺失,.h檔案一定記得新增到mdk中,不然會無法識別

有乙個檔案為stm32f10x_conf.h,是管理各種庫中標頭檔案的,其中可能有的.h被注釋掉了,需要自己點看檢視一下,也可以注釋掉自己沒用到的.h

還有就是在led.h中不用去寫#define gpio_setbits這種語句,可以在main.c中直接呼叫

如果是進行位操作的話,需要在led.h中進行定義

#define led0 paout(8)

#define led1 pdout(2)

同時還要新增#include 「sys.h」

sys.h中定義了位操作

所有工程檔案如圖

再其他就沒有遇到什麼問題,開始比較簡單。

說的不對的地方,請大家指正。初學

stm32實際運用中遇到的問題

1.不要太相信stm32內部的io上下拉,必要的話,在外部接上下拉電阻。2.當把jtag的io 口當成普通 io口來使用時,要先禁止 即 要使用到pb3 pb4 pa13 pa14 pa15 時,要先禁止 jtag。在庫函式中,呼叫一下函式 gpio pinremapconfig gpio rema...

STM32 虛擬串列埠遇到的問題

目標 移植正點原子stm32f103zet6串列埠程式到stm32f103c8t6 問題1 程式執行到usb初始化,卡住 原因 hw config中使用printf函式,由於沒有初始化 串列埠1,導致卡住。解決方法 1.初始化串列埠1 2.注釋hw config中所有printf 問題2 未知usb...

STM32學習記錄(1)

1.同時控制同個埠的多個led,在初始化的時候,使用或運算子 就不用再cv乙份 進行初始化了。2.led,發光二極體 二極體 壓降,經過自己的時侯電壓會自動降低額定的伏數,0.3v或0.7v,電流不能大於10ma,限流電阻最小值 3300 300 10 300歐姆。3.引腳懸空 答 那麼電阻約等於無...