本次是基于STM32F407ZET6做一個GPIO配置,實現點燈實驗。
新建文件
LED.c、LED.h文件,將其封裝到Driver文件中。
雙擊Driver文件將LED.c添加進來
編寫頭文件,這里注意需要將Driver頭文件聲明一下。
在LED.c、main.c里面引入頭文件LED.h
LED初始化
LED初始化就是對GPIO初始化。以后用到GPIO引腳都需要對其配置(按鍵KEY? ?蜂鳴器Buzzer)
LED_Init? ? ?LED初始化? ? ?這里我們跟著庫函數直接復制了。
找到STM32F407的庫函數手冊
將下面框住的部分復制到 LED.c中
定義結構體變量
GPIO_InitTypeDef GPIO_InitStructure;
配置時鐘,對其GPIO引腳使用必須開啟其對應的引腳時鐘,這里開啟的GPIO G族的時鐘,因為led燈的引腳是GPIOG族的(根據電路原理圖)
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
選擇需要配置的引腳
這里需要看電路原理圖,來知道小燈對應芯片的那個引腳
GPIO_InitStructure.GPIO_Pin =;
Ctrl + F搜索LED1找到其位置,根據原理圖得知,對應PG13引腳,也就是GPIO G族的13號引腳
這樣我們就可以編寫代碼了,我們配置13號引腳使其點亮LED1燈。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
選擇工作模式
這里選擇輸出模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
對其F12 goto過去可以看到其工作模式的種類
GPIO_Mode_IN? ? 輸入模式
GPIO_Mode_OUT 輸出模式
GPIO_Mode_AF? ? 復用輸入
GPIO_Mode_AN? ? 模擬輸入
選擇輸出模式
這里選擇推挽輸出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
跳轉過去可以看到都有什么類型的輸出模式
PP? ? ?推挽輸出模式
OD? ? 開漏輸出模式
還有復用推挽和復用開漏模式。
選擇輸入模式
這里選擇浮空輸入。
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
跳轉過去可以看到都有什么輸入模式
NOPULL? ? 浮空
UP? ? ? ? ? ? ?上拉
DOWN? ? ? ?下拉
配置速度
配置高低電平切換的速度,這里為100MHz。
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
跳轉過去可以看到都有多少Hz的速度
底下是宏定義
2MHz? ? ?Low_Speed? 低速
25MHz? ?Medium_Speed? 中速
50MHz? ?Fast_Speed? ?快速
100MHz? High_Speed? 高速
GPIO初始化
帶Init后綴的全是初始化函數,這里是初始化GPIO? G族的引腳。
GPIO_Init(GPIOG, &GPIO_InitStructure);
點燈操作
根據電路圖得知,引腳輸出低電平時,LED燈才會亮起? ?因為左邊接VDD3.3V屬于高電勢,LED0需要輸出低電平才會產生電勢差使電流流動。
我們這樣配置完GPIO是默認輸出低電平的,所以現在上電編譯下載就會讓LED1燈亮,但為了后續的模塊操作,我們在初始化的時候將所有的燈關閉也就是全置為高電平。
GPIO_SetBits函數可以將引腳置高電平。
先將LED_Init在頭文件里聲明一下
然后我們在main.c里做電燈操作。
GPIO_ResetBits 函數可以將引腳置低電平
將LED_Init寫到主函數里。
編譯下載實現點亮LED1燈效果。
資源包:
百度網盤:KEIL
鏈接: https://pan.baidu.com/s/1DZZ_kP7jXLYeisntS9PZzA?pwd=6ujf 提取碼: 6ujf