1. 程式人生 > >STM32F407 GPIO 庫函數編程套路(led與beep總結) 個人筆記

STM32F407 GPIO 庫函數編程套路(led與beep總結) 個人筆記

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總結) 個人筆記