前言
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版本環境搭建以及工程模版配置》
下一篇:**敬請期待…
若該文為原創文章,轉載請註明原文出處
本文章部落格地址:https://blog.csdn.net/qq21497936/article/details/117085167