怎麼使用ST的庫開發STM32

2022-02-05 17:03:41 字數 2544 閱讀 9309

摘自:

+ compiler 中設定 optimzation 中的 level選擇 none,因為是用來除錯,所以先不要設定優化,然後在 preprocessor 裡面設定預編譯器引數,其實就是標頭檔案的路徑,這個比較重要,例如我設定了這些,其中 $proj_dir$\ 是你project儲存的路徑,\..\

表示父目錄的意思,其他就是根據實際有標頭檔案的地方都加入就是了。

$proj_dir$\inc

\$proj_dir$\.

.\libraries\cmsis\cm3\devicesupport\st\stm32f10x

$proj_dir$\.

.\libraries\stm32f10x_stdperiph_driver\inc

$proj_dir$\.

.\libraries\cmsis\cm3\coresupport

$proj_dir$\

然後在下面的 define symbols 裡面設定符號,說白了就是 #define ,差不多,不過這個是通過編譯器傳遞給每乙個原始檔,因為我們需要使用庫,而且使用的

high desity 器件,所以先設定兩個符號。

use_stdperiph_driver

stm32f10x_hd

然後設定linker,這個也是比較重要,首先在庫的演示檔案中

stm32f10x_stdperiph_lib_v3.3.0\project\stm32f10x_stdperiph_template\ewarmv5

找到幾個 .icf 的檔案,這個就是連線指令碼了,再回到linker 的config頁,選擇 override default並選擇剛才的檔案,然後 edit 設定每個位址,可以直接用原來的那個 stm32f10x_flash.icf 就ok了是將**放到 rom區。

然後 library 頁勾選了那個 automatic runtime library,讓編譯器自動載入iar自帶的runtime庫,雖然剛才新增了 st庫提供的啟動**,不過那個只是修改了中斷向量,其他都沒有改,所以呢還是需要iar的庫來初始化其他工作的。

然後是 debugger 標籤,選擇 rdi 然後在 rdi標籤上選擇 jlink 的rdi驅動,在 jlink的安裝目錄有。

最後就是在st的project目錄下的演示**中copy幾個過來用,其中重要的是 main.c ,stm32f10x._it.c 這個是中斷處理的,暫時用不上,還有 stm32f10x_conf.h 這個是配置包含,將裡面需要用到的幾個去掉注釋,例如這裡使用的

rcc gpio misc,其他就注釋起來

jlink的設定中幾個需要注意的,首先速度最好選擇 auto selection ,因為做工問題,設定速度太快的話可能就不工作了。慢點就忍受一下吧。要勾選 enable flash programming,,並且器件選擇一下就ok,例如我的是 st stm32f103ve

最後就是編寫c檔案,由於main函式也是st的**中的,所以刪除一點不用的就ok了。

執行到main函式為止,在st庫的幫助下,已經將晶元的時鐘頻率設定好在 72mhz,基本環境都簡歷了,接下來就是寫功能函式。

首先將外設的時鐘都開啟

rcc_apb2periphclockcmd(rcc_apb2periph_gpioa | rcc_apb2periph_gpiob |

rcc_apb2periph_gpioc | rcc_apb2periph_gpiod

|rcc_apb2periph_gpioe, enable)

;我的led接在 pb5 ,送高電平就亮,如果不用庫的話,我可以用以下的**去點亮

#define b_base (

(unsigned long volatile

*)0x40010c00)

#define b_crl (

*(b_base

+ 0)

)#define b_odr (*(

(uint32_t volatile

*) 0x40010c0c)

)b_crl &= ~(0x0f<

<

(5*4));

// clear

b_crl |

=(0x01<

<

(5*4));

b_odr &=

(uint16_t)

~(1<

<5)

;b_odr =

(uint16_t)1<

<5;

如果使用庫的話則是,設定 pb5 為輸出並且輸出高電平

gpio_initstructure.gpio_pin = gpio_pin_5;

gpio_initstructure.gpio_mode = gpio_mode_out_pp;

gpio_initstructure.gpio_speed = gpio_speed_50mhz;

gpio_init(gpiob, &gpio_initstructure)

;gpio_setbits(gpiob,gpio_pin_5)

;至此則完成了基本的環境了,接著就是要學習怎麼使用庫還有stm32的晶元了。

etual

2010-7-21

STM32 庫開發 位址對映

1.stm32有ahb,apb2,apb1匯流排。其中apb2外設位址空間是從0x40010000至0x40013fff位址。第乙個位址稱為基位址。gpio typedef gpiox gpiox gpioa gpiox crl 0xffffffff 3.配置gpio的暫存器要開啟外設時鐘!區別於5...

STM32韌體庫使用分析

stm32 的v3.3.0庫,內有cmsis的資料夾為arm cortex 微控制器軟體介面標準,現在將我實際工作中的作乙個簡要分析 1.選擇啟動檔案 根據自己所用的晶元的型號,選擇正確的啟動檔案。這個根據資料手冊上的劃分。例如 stm32f101vbt6 就選擇 startup stm32f10x...

STM32的標準庫使用學習

用乙個led的輸出配置,和按鍵的輸入配置來進行記錄。初始化配置 void bspledinit 常用api gpio resetbits gpioc,gpio pin 13 gpio setbits gpioc,gpio pin 13 初始化配置 void bspkeyinit 常用api gpio...