stm32開發筆記(二):stm32系列使用V3.5韌體庫的幫助文件以及GPIO基本功能(一)
- 2021 年 5 月 20 日
- 筆記
前言
stm32系列是最常用的單片機之一,不同的版本對應除了引腳、外設、頻率、容量等』不同之外,其開發的方法是一樣的。
本章講解使用庫函數使用GPIO引腳功能。
本文章為多年前學習方法總結,基本是一通百通(PS:學的是方法而不是技術本身)。
編寫GPIO功能,建議初學者學習幫助文件中的案例。
這是韌體庫V3.4中的GPIO源文件,而V3.5中的資源文件使用的不是韌體庫,V3.4這個文件明顯是GPIO操作LED的,所以本人認為應是V3.5的韌體庫的.chm幫助文檔有問題,V3.5的部分程式碼截圖如下:
可以看出,其函數體根本沒有使用韌體庫,而是使用暫存器,然後我們這個源文件部分使用V3.4版本的韌體庫作為參考,繼續往下走:
再點擊
看程式碼,然後我們跟著程式碼來詳細看整個文件,我們不管注釋。
00022行是韌體庫頭文件,而00023行是官方評估板的頭文件,這個對我們肯定是不用的,是與使用的具體的硬體定義有關的宏定義,繼續往下走
00037行是定義GPIO初始化的結構體,要操作任何外設都得先過它初始化
00040行是延遲函數
00049行進入主函數,也是程式開始執行的入口,注意看注釋,時鐘已經通過啟動文件中調用SystemInit()函數配置好(在未配置韌體庫時,只添加啟動程式碼和main函數,會報錯沒有定義SystemInit函數,這就很好的解釋了此處為什麼沒有配置時鐘,詳細了解請查看QQ21497936空間中STM32新手問題解決方法),繼續往下看
(注意:這個注釋,這個注釋的意思是將埠全部初始化成模擬輸入模式,這樣可以減少耗電以及增加硬體的抗干擾性能)
00061,00062,00063行是使能外設GPIOA,GPIOB,GPIOC,GPIOD,GPIOE的外設時鐘。
00065行是選中所有引腳(引腳0至引腳15)
00066行是輸入輸出模式為模擬輸入
00076行至00082行之間,當定義了宏STM3210E_EVAL或者USE_STM32100E_EVAL則將埠GPIOF,GPIOG也初始化,我們可以判斷這兩個宏是官方配套的評估板上才有的F埠和G埠,其用的引腳至少144引腳及以上的晶片。
這個是配套版初始化的LED1,LED2,LED3,LED4這樣我們可以判斷,這個函數是初始化指定埠的一個引腳,至於是哪個引腳肯定在評估板頭文件有相關的宏定義,那麼我們深入先點開STM_EVAL_LEDInit這個函數,查看它的源程式碼
跟我們之前預想的一樣,定義一個結構體,使能外設,指定引腳,推挽輸出,50MHz的頻率,初始化;至於Led_TypeDef這個結構和GPIO_CLK,GPIO_PORT應都是與評估板有關的宏定義。我們關心的重點在於聲明結構體,使能時鐘,配置引腳,然後初始化,我們還是把開發板這個宏定義截圖出來,便於大家理解,我們查找一次LED1定義,來看看LED1是哪個埠的哪個引腳,是如何完成配置的
LED1宏的實際值為0;
LED1帶入LEDn,實際值為0,c語言數組,則GPIO_CLK[LED1]實際上是LED1_GPIO_CLK,
它的宏定義為C埠,我們再看看引腳:
GPIO_PIN[LED1]實際為GPIO_PIN [0],其宏定義為GPIO_Pin_6(註:聯繫到韌體庫本自身的宏定義了)
GPIO_PORT[LED1]實際為LED_GPIO_PORT宏,定義如下
那麼就是埠C,所以這段程式碼就是埠C使能,配置引腳6為推挽輸出,然後初始化。
LED1,LED2,LED3,LED4在評估板的頭文件相關宏定義如下:
00090-00115是與評估板相關的LED燈操作,開LED1,延遲,開LED2,開LED3,關LED1,延遲,開LED4,關LED2,關LED3延遲,關LED4,這個程式就不斷這個循環體
00123-00126是延遲函數的函數體
這個例子文件就說到此處,詳解了一般IO口的設置過程,過程總結如下:
-
(可選步驟):都設置成模擬輸入,降低能耗和增加抗EMC/EMI等
-
步驟二:使能埠的外設時鐘
-
步驟三:結構體變數配置埠的相關資訊(埠引腳,埠模式,埠頻率)
-
步驟四:初始化埠
-
步驟五:可以對埠進行輸入輸出的操作。
上一篇:《stm32開發筆記(一):庫函數V3.5版本環境搭建以及工程模版配置》
下一篇:**敬請期待…
若該文為原創文章,轉載請註明原文出處
本文章部落格地址://blog.csdn.net/qq21497936/article/details/117085167