前言
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