《stm32庫開發實戰指南》摘錄及筆記
MCU(微控制器)
CMSIS標準( Cortex Microcontroller Software Interface Standard):解決軟件在同內核、不同外設上移植困難的問題
- 內核函數層:其中包含用於訪問內核寄存器的名稱、地址定義,主要由ARM公司提供
- 設備外設訪問層:提供了片上的核外外設地址中斷意義主要由芯片生產商提供
STM32庫是由ST公司針對STM32提供的函數接口,即API(Application Program Interface):應用程序接口,通過這些函數接口來配置STM32的寄存器。
學習時注意以下幾點:
1)適應試用庫的開發方式,加強運用C語言的能力,建立工程意識
2)熟悉Cortex-M系列芯片構架,瞭解CMSIS標準,熟悉STM32的總線架構
3)掌握I2C,SPI,SDIO,CAN,TCP/IP,等各種通信協議
庫目錄、文件簡介:
- Libraries文件夾:驅動庫的源代碼及啓動文件(在使用庫開發時,我們需要把Libraries目錄下的庫函數文件添加到工程中)
- Project文件夾:用驅動庫寫的例子和一個工程模板
- 庫幫助文檔:這是一個已經編譯好的HTML文件,主要講述如何使用驅動庫來編寫自己的應用程序。
CMSIS文件下
庫目錄、文件簡介
1. core_cm3.c文件
CoreSupport文件夾
core_cm3.c文件中包含了"stdint.h"這個頭文件,這是一個ANSI C 文件,是獨立於處理器之外的
stdint.c文件中的類型定義
1. /* exact-width signed integer types */
2. typedef signed char int8_t;
3. typedef signed short int int16_t;
4. typedef signed int int32_t;
5. typedef signed __int64 int64_t;
6.
7. /* exact-width unsigned integer types */
8. typedef unsigned char uint8_t;
9. typedef unsigned short int uint16_t;
10. typedef unsigned int uint32_t;
11. typedef unsigned __int64 uint64_t;
2. system_stm32f10x.c文件
(在DeviceSupport文件夾下的是啓動文件、外設寄存器定義和中斷向量定義層的一些文件,這是由ST公司提供的)
system_stm32f10x.c(由ST公司提供的,遵守CMSIS標準):功能是設置系統時鐘和總線時鐘。所有外設都與時鐘的頻率有關,所以這個文件的時鐘配置很關鍵。
system_stm32f10x.c在實現系統時鐘時要用到PLL(鎖相環),這就需要操作寄存器,寄存器都是以存儲器映射的方式來訪問的,所以該文件中包含stm32f10x.h這個頭文件。
3.stm32f10x.h文件
這個文件非常重要,它包含了STM32中寄存器地址和結構體類型定義,在使用到STM32固件庫的地方都要包含這個頭文件。
4.啓動文件
- 啓動文件的類型
Libraries\CMSIS\Core\CM3\startup\arm文件夾下是由彙編語言寫的系統啓動文件,不同的文件對應不同的芯片型號
文件名的英文縮寫的意義如下:
cl:互聯新產品,stm32f105/107系列
vl:超值型產品,stm32f100系列
xl:超高密度(容量)產品,stm32f101/103系列
ld:低密度產品,Flash小於64KB
md:中等密度產品,Flash等於64KB或者128KB
hd:高密度產品,Flash大於128KB
如STM32F103VET6,64KB RAM和512KB ROM,是屬於高密度產品,所以啓動文件要選擇startup_stm32f10x_hd.s
- 啓動文件的作用
啓動文件是任何處理器在上電覆位之後最先運行的一段彙編程序。在我們編寫的C語言運行之前,需要由彙編語言爲C語言的運行建立一個合適的環境,接下來才能運行我們的環境。
總的來說,其作用如下:
1.初始化堆棧指針SP
2.初始化程序計數器指針PC
3.設置堆、棧的大小
4.設置異常向量表的入口地址
5.配置外部SRAM作爲數據存儲器(這個有用戶配置,一般開發板沒有外部SRAM)
6.設置C庫的分支入口_main(最終用來調用main函數)
7.3.5版本的啓動文件還調用了在system_stm32f10x.c文件中的SystemIni()函數配置系統時鐘,在舊版本的工程中要用戶進入main函數自己調用SystemIni()函數
5.STM32F10x_StdPeriph_Driver文件夾
Libraries\STM32F10x_StdPerph_Driver文件夾下有inc(include縮寫)和src(source縮寫)這兩個文件夾,這都屬於CMSIS的設備外設函數部分。src裏面是每個設備外設的驅動程序。
inc文件夾包含各個外設的頭文件(stm32f10x_ppp.h),src文件夾包含各個外設的源文件(stm32f10x_ppp.c)。ppp爲外設名稱。
另外還有HTML文件爲版本庫更新說明。
6.stm32f10x_it.c文件和stm32f10x_conf.h文件
在庫目錄的Project\STM32F10x_StdPeriph_Template目錄下,存放了一個官方的工程模板,我們在用庫建立一個完整的工程時,還需要添加這個目錄下的stm32f10x_it.c、stm32f10x_it.h和stm32f10x_conf.h這三個文件。
stm32f10x_it.c是專門用來編寫中斷服務函數的,在我們修改前,這個文件已經定義了一些系統異常接口,其他普通中斷服務函數由我們自己添加。具體清查閱庫啓動文件的源碼。
stm32f10x_conf.h被包含進stm32f10x_it.h文件是用來配置使用了什麼外設的頭文件,用這個頭文件我們可以很方便地增加或刪除上面Driver目錄的外設驅動函數庫。
實際開發中使用斷言時,先通過定義USE_FULL_ASSERT宏來使能斷言,然後定義"assert_failed"函數,通常我們會讓它調用printf函數輸出錯誤說明。使能斷言後,程序運行時會檢查函數的輸入參數,當軟件經過測試,可發佈時,會取消USE_FULL_ASSERT宏來去掉斷言功能,使程序全速運行。
stm32f10x_stdperiph_ib_um.chm(庫文件幫助文檔 ):查閱此文件來了解庫函數原型或庫函數調用方法,也可以直接閱讀源碼裏的函數說明。
【初學stm32,不願放棄,還有衆多不懂之處,但萬丈高樓平地起,加油】