上次學stm32f103是在大二的暑假,學了一段時間之後也沒有專案做,漸漸地就轉向其他的方向,最近實習要用到stm32f407,就打算從頭學,但是一些基礎還在,並決定將學習的過程記錄一下,以備使用。
一.stm32f407zgt6的gpio資源介紹
stm32f407zgt6
- 一共有7組io口
- 每組io口有16個io
- 一共16x7=112個io
外加2個ph0和ph1
一共114個io口
二.gpio的相關暫存器
一組io口相關的暫存器有10個,也就是說,10個暫存器控制一組io口;
乙個埠模式暫存器(gpiox_moder)
乙個埠輸出型別暫存器(gpiox_otyper)
乙個埠輸出速度暫存器(gpiox_ospeedr)
乙個埠上拉下拉暫存器(gpiox_pupdr)
乙個埠輸入資料暫存器(gpiox_idr)
乙個埠輸出資料暫存器(gpiox_odr)
乙個埠置位/復位暫存器(gpiox_bsrr)
乙個埠配置鎖存暫存器(gpiox_lckr)
兩個復位功能暫存器(低位gpiox_afrl & gpiox_afrh)
三.gpio的配置流程
//宣告乙個gpio結構體變數
gpio_inittypedef gpio_initstructure;
delay_init(84);
//使能gpio所在的匯流排的時鐘
rcc_ahb1periphclockcmd(rcc_ahb1periph_gpiof, enable);
//定義該結構體
gpio_initstructure.gpio_pin=gpio_pin_9 |gpio_pin_10;//使用的io口 (總共有16個io口)
gpio_initstructure.gpio_mode=gpio_mode_out; //設定io的模式
gpio_initstructure.gpio_speed=gpio_speed_100mhz; //100mhz
gpio_initstructure.gpio_otype=gpio_otype_pp; //推挽
gpio_initstructure.gpio_pupd=gpio_pupd_up; //上拉
//初始化該結構體
gpio_init(gpiof,&gpio_initstructure);
分析:
(1) gpio的重要結構體,對其進行賦值
typedef struct
gpio_inittypedef;
( 1) gpio_mode_ain 模擬輸入
( 2) gpio_mode_in_floating 浮空輸入
( 3) gpio_mode_ipd 下拉輸入
( 4) gpio_mode_ipu 上拉輸入
( 5) gpio_mode_out_od 開漏輸出
( 6) gpio_mode_out_pp 推挽輸出
( 7) gpio_mode_af_od 復用開漏輸出
( 8) gpio_mode_af_pp 復用推挽輸出
8種配置模式的使用場景
二.gpio的時鐘使能
時鐘使能的函式在stm32f4xx_rcc.h中,根據上圖,外設在哪一條時鐘匯流排上進行函式選擇,所以gpiof在ahb1匯流排上,此時選擇的函式為:
rcc_ahb1periphclockcmd();
四.gpio相關重要函式
重要函式:
1個初始化函式:
void gpio_init(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct);
2個讀取輸入電平函式:
uint8_t gpio_readinputdatabit(gpio_typedef* gpiox, uint16_t gpio_pin);
uint16_t gpio_readinputdata(gpio_typedef* gpiox);
2個讀取輸出電平函式:
uint8_t gpio_readoutputdatabit(gpio_typedef* gpiox, uint16_t gpio_pin);
uint16_t gpio_readoutputdata(gpio_typedef* gpiox);
4個設定輸出電平函式:
void gpio_setbits(gpio_typedef* gpiox, uint16_t gpio_pin);
void gpio_resetbits(gpio_typedef* gpiox, uint16_t gpio_pin);
void gpio_writebit(gpio_typedef* gpiox, uint16_t gpio_pin, bitaction bitval);
void gpio_write(gpio_typedef* gpiox, uint16_t portval);
因此此時就可以用,以下函式進行點亮,熄滅led了
void gpio_setbits(gpio_typedef* gpiox, uint16_t gpio_pin);
void gpio_resetbits(gpio_typedef* gpiox, uint16_t gpio_pin);
具體**如下:
int main(void)
}
STM32F4學習筆記之GPIO輸入,按鍵檢測
說明 1.當按鍵沒按下時,pc13通過4.7k電阻接到地,此時為低電平,當按鍵按下時,pc13接到3.3v的vcc,此時電平為高,可以通過將i o埠配置為輸入狀態,通過讀取i o電平的高低狀態就可以知道按鍵的狀態。pa0同理。2.電容c62,c63是硬體消抖作用,但是還有軟體消抖,即配置乙個延時函式...
STM32F4的GPIO口配置模式
stm32f4 每組通用 i o 埠包括 4 個 32 位配置暫存器 moder otyper ospeedr 和 pupdr 2 個 32 位資料暫存器 idr 和 odr 1 個 32 位置位 復位暫存器 bsrr 1 個 32 位鎖定暫存器 lckr 和 2 個 32 位復用功能選擇暫存器 a...
STM32F4外部GPIO中斷源使用筆記
stm32f4有7個外部gpio中斷源,它們負責分配給每個組的gpio 15.0 對應關係為 外部中斷初始化順序為 gpio inittypedef gpio initstructure nvic inittypedef nvic initstructure exti inittypedef ext...