STM32F407 GPIO 庫函數編程套路(led與beep總結) 個人筆記
阿新 • • 發佈:2018-11-24
type 默認 結構 調用 end 結構體 編程 int void
本文由正點原子STM32F407探索者開發板的led和beep實驗,總結了gpio編程的套路。
下文中以hardware 來稱呼可能的硬件外設,如led或beep等。
新建項目後主要用到三個文件:hardware.c ,hardware.h, main.c
hardware.h
#ifndef __HARDWARE_H
#define __HARDWARE_H
#include "sys.h"
void HARDWARE_Init(void);
#endif
hardware.c
#include "hardware.h" //初始化該硬件外設與mcu相連的引腳為輸出口 void HARDWARE_Init(void) { //0.定義結構體 GPIO_InitTypeDef GPIO_InitStructure; //1.使能與外設連接的端口的時鐘(看原理圖,可以知道哪些端口與所需外設相連,多個端口可以用或”|“) RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF時鐘(以gpiof為例,實際要看那個端口與外設相連) //2.初始化外設對應引腳(以GPIOF8為例) /*(Pin, 幾號引腳,看原理圖 Mode輸入還是輸出 , OType推挽還是別的, Speed , PuPd上拉還是下拉,即默認為高電平還是低電平 共五個)*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通輸出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽輸出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//下拉 GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIO //3.輸出高低電平: GPIO_ResetBits or GPIO_SetBits GPIO_ResetBits(GPIOF,GPIO_Pin_8); //蜂鳴器對應引腳GPIOF8拉低, }
main.c
調用HARDWARE_Init可以接著用GPIO_ResetBits和GPIO_SetBits 函數來輸出高低電平。可以配合delay函數進行一些操作。例如:
#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "beep.h" int main(void) { delay_init(168); //初始化延時函數 LED_Init(); //初始化LED端口 BEEP_Init(); //初始化蜂鳴器端口 while(1) { GPIO_ResetBits(GPIOF,GPIO_Pin_9); // DS0拉低,亮 等同LED0=0; GPIO_ResetBits(GPIOF,GPIO_Pin_8); //BEEP引腳拉低, 等同BEEP=0; delay_ms(300); //延時300ms GPIO_SetBits(GPIOF,GPIO_Pin_9); // DS0拉高,滅 等同LED0=1; GPIO_SetBits(GPIOF,GPIO_Pin_8); //BEEP引腳拉高, 等同BEEP=1; delay_ms(300); //延時300ms } }
STM32F407 GPIO 庫函數編程套路(led與beep總結) 個人筆記