stm32小白學習記錄(一)

《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,不願放棄,還有衆多不懂之處,但萬丈高樓平地起,加油】

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章