stm32標準庫編程模型

相對於使用c語言指針操做寄存器地址直接設置寄存器數據,標準庫使用c語言結構體和函數對mcu外設進行了封裝。因爲c沒有面向對象機制,因此只能使用結構體來封裝 外設對象的屬性,函數來實現對外設對象的行爲操做。函數

對於GPIO每一個外設通常都對應多個寄存器,如控制寄存器、數據寄存器、時鐘寄存器等,每一個寄存器最多32位,可實現不少種設置。所以採用告終構體 + 枚舉 進行封裝。設計

PPP_InitTypeDef 用來定義外設對象結構體和直接屬性,每一個屬性對應一個寄存器枚舉類型PPPxxx_TypeDef,屬性(寄存器)枚舉類型包含了對該寄存器的全部可能設置。指針

另外有些外設沒有使用枚舉的方式定義寄存器的可選值,而是採用定義多個常量宏方式,這時PPP_InitTypeDef 屬性仍然對應一個寄存器可能的值。對象

因此,不管使用枚舉仍是宏的方式定義寄存器可選值,最終都經過PPP_InitTypeDef來設置外設寄存器。ci

實現對寄存器設置的函數爲PPP_Init,設置好外設對象的結構體後,調用該函數即完成對 對象寄存器的初始化配置。開發

因爲普通的IO(GPIO)是獨立工做的,只須要控制其輸出高低電平即完成工做,因此通常不須要其它操做,固然若是須要使用GPIO模擬其它功能,這時就須要標準庫定義的其它函數,如讀數據、寫數據、設置複用功能等。同步

具體到stm32的外設,因爲stm32 芯片的管腳除了電源、極少數獨立功能引腳,剩下的都是GPIO,全部具體外設功能都是從這些GPIO複用而來,所以要想使用某功能,須要經過GPIO_PinAFConfig 設置該GPIO引腳要複用的功能。it

另外,考慮到低功耗的設計,stm32的全部外設功能能夠獨立設置開啓和關閉,對應外設的時鐘也須要獨立開啓和關閉,若是該外設的時鐘沒有開啓,不管怎樣外設都不會工做。原理

對於其它外設,通常都須要遵照某個協議才能使用,如通訊類的i2c、spi、UART管腳,須要先熟悉協議,瞭解是否須要時鐘同步、數據收發的格式等其它協議規範,而後按照規範經過函數操做外設寄存器,實現具體外設功能。配置

不管使用什麼外設,必須根據硬件原理圖,肯定具體使用的管腳才能進行開發。硬件的通訊通常都是在特定時鐘頻率下發送一系列特定格式的幀(高低電平)來實現的。

具體到顯示外設,則必須有基本的字庫實現對ascii碼的解析才能顯示文字,中文還須要中文字庫。

stm32標準庫是對寄存器的封裝及直接操做,若是不熟悉外設結構和外設寄存器或者相關外設的通訊協議、原理,則無法使用相關函數。

相關文章
相關標籤/搜索