stm32 GPIO简单介绍及初始化配置(库函数)
前言:
相信,大部分查找GPIO的人,都是剛剛接觸STM32的人,而剛接觸STM32的人,大部分是從51上來的人,所以我會由淺入深,從51和STM32的區別入手,通過對比這兩個處理器的配置方法,來跟大家慢慢講解(學知識可不能急于求成)。博主以stm32f1為主控芯片,以下均簡稱為stm32。
首先,上一張我的理解圖(畫不好。。。但能看),給個形象的概念
一、講圖之前,先給大家一個stm32的概念:“時鐘概念”
1.??STM32的時鐘是什么?
stm32的時鐘是由內部或外部振蕩器產生的“頻率”,而被人們形象的稱為“系統時鐘”。最大為72MHz換成周期T為:1/72MHz≈13.9ns
2.??為什么要用時鐘?
因為耗電量,stm32功能強大,能做很多事,但與之同時帶來的消耗也越嚴重,當stm32不引入時鐘時鐘的話,就像51一樣外設全開,如果大家是使用電池的話,就會感到電量的珍貴(開機幾分鐘就沒電了。。。),所以廠家(st公司)為了解決這個問題,引入了“時鐘概念”,即使用哪個外設就給哪個外設時鐘(頻率),不使用的就關掉(不震蕩)。此做法大大降低了功耗,續航持久。
二、接下來說說片內外設
1、 什么是片內外設?
我來個比喻吧,stm32是一個工廠,內部CPU是老板,而外設就是幫助CPU干活的工人。老板(CPU)想做某件事,于是就命令(指令)有這個能力的工人(外設)去做這件事,并給予研究經費(時鐘頻率)。工人拿了經費,就按照老板的命令來執行工作。這就是CPU和外設的關系(不可逆關系。。。)
另外,片內外設也可以等同于一塊內部芯片,它有內部寄存器,CPU給出指令,片內外設得到指令,并配置其內部寄存器,以達到功能的實現。
三、初始化GPIO,點亮LED燈
外設的功能都是完全不同的,但是初始化都是大同小異,學會了GPIO這最簡單的外設初始化,那么后面就很好辦了。點燈是所有學單片機的人都應該學會的第一項技能,這樣子才算入門。51單片機的點燈是,通過控制寄存器將片外引腳(我們稱之為IO口)拉低拉高,輸出高低電平,以控制LED亮滅。
51過程是這樣子:單片機給指令->控制寄存器->給IO口電平->控制LED亮滅
?
而stm32的點燈則是,通過使能外設GPIO時鐘,發出指令給外設GPIO,外設GPIO收到指令后,著手配置自己的寄存器,然后給IO口模式,讓其實現各種功能(我說過STM32功能強大吧?IO口的配置也是有很多知識的,之后會介紹)。
stm32過程是這樣子(參照上圖):CPU給指令->GPIO收到指令->配置內部寄存器->配置IO口模式(注意是模式)->控制LED亮滅。
貼上代碼:
void led_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;????????????????????//定義初始化結構體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIOA時鐘
GPIO_InitStruct.GPIO_Mode????= GPIO_Mode_Out_PP;???? //配置模式
GPIO_InitStruct.GPIO_Pin???? = GPIO_Pin_0;???????????//配置哪個IO口
GPIO_InitStruct.GPIO_Speed???= GPIO_Speed_50MHz;???? //配置IO口速度,僅輸出有效
GPIO_Init(GPIOA,&GPIO_InitStruct);???????????????????//初始化GPIOA的參數為以上結構體
}
int main(void)
{
led_init(void); //調用LED初始化函數
GPIO_ResetBits(GPIOA,GPIO_Pin_0) //拉低電平
GPIO_SetBits(GPIOA,GPIO_Pin_0) //拉高電平
while(1); //死循環(停止程序)
}
?
步驟:
1、首先必須先使能時鐘,時鐘總線可參考:中文參考手冊P28頁,這一頁是時鐘總線上掛載的片內外設,我就不上圖了。時鐘使能函數在官方庫函數的對應頭文件里有,比如找RCC函數則應該在“stm32f10x_rcc.h”里(拉到最后面void開頭的那些函數)
2、定義初始化結構體,結構體是外設的初始化參數。
3、初始化結構體中的參數,復制并粘貼結構體然后按“.”這個符號,會出來個框,框內就是外設的參數。
3、調用外設初始化函數,初始化函數也是在官方庫函數的對應頭文件里。比如找GPIO函數則應該在“stm32f10x_gpio.h”里。符號“&”是取地址符,意思是:初始化的參數地址為。。。(然后MDK就尋找結構體的位置,以找到結構體的參數)。
4、初始化完成后,在主函數中調用初始化函數,再調用官方庫函數,即可進行相應的操作。(調用的官方庫函數說明,請在“STM32固件庫使用手冊”中查看,博主不多作說明)
小知識:
首先呢,初始化函數,都可以在“STM32固件庫使用手冊”中查到使用說明(我就不提供連接了);其次,點擊函數并右鍵,會出現“go to definition of'函數名'”(或者按F12),接著畫面會跳轉到官方庫的 .c 文件,那里有很詳細的說明(說明中標明有哪些函數需要配置),還有,可以自定義庫函數,具體我后面(可能會寫),網上有攻略寫得比我好。
以上。
?
GPIO八種模式
?
flag(今后會更新的,正文是大概框架):?1、GPIO寄存器簡單介紹及配置
總結
以上是生活随笔為你收集整理的stm32 GPIO简单介绍及初始化配置(库函数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stm32篇--系统初始化
- 下一篇: stm32 GPIO模式