stm32按鍵配置

前言:咱們都知道開發板上除了有經典的流水燈以外,還有一個必備的練習硬件--按鍵(key),下面繼續來完成按鍵的配置。spa

 一、經過查看原理圖,找出按鍵(key)的管腳名字和對應芯片上的I/O口,四個I/O分別爲PA0、PE二、PE3和PE4。code

 

二、配置按鍵I/O口這裏要注意的是工做模式要改爲輸入模式,不是led的輸出模式,而且不須要設置輸出模式。blog

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //輸入模式

三、獲取按鍵的按下和釋放的狀態ip

//讀取PA0引腳的電平,低電平,按鈕按下
GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 0
//高電平,按鈕釋放
GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1

 

四、下面是具體代碼,實現了按下一個按鍵對應的led燈亮,釋放以後led燈滅開發

#include "stm32f4xx.h"

GPIO_InitTypeDef  GPIO_InitStructure;

void delay(void)
{
    unsigned int i=0x500000;
    
    while(i--);

}

/*初始化led燈*/
void init_led(void)
{
    /* GPIOG Peripheral clock enable ,使能外設時鐘GPIOF、GPIOE,也就是讓GPIOF、GPIOE工做*/
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
      RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
     
     /* 配置PF9引腳爲推輓輸出模式 */
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;    //第PF9和PF10號引腳
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;              //輸出模式
     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;             //推輓輸出模式,增長輸出電流
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;          //引腳的的工做速度最高爲100MHz,最低爲2MHz,工做速度越高,功耗就越高
     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;           //不須要上拉電阻
     GPIO_Init(GPIOF, &GPIO_InitStructure);                     //初始化端口F
    
     
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14; //第PE13和PE14號引腳
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;            //輸出模式
     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;           //推輓輸出模式,增長輸出電流
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //引腳的的工做速度最高爲100MHz,最低爲2MHz,工做速度越高,功耗就越高
     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;         //不須要上拉電阻
     GPIO_Init(GPIOE, &GPIO_InitStructure);                   //初始化端口E
     
}

/*初始化按鍵*/
void init_key(void)
{
    /* GPIOG Peripheral clock enable ,使能外設時鐘GPIOA和GPIOE,也就是讓GPIOA和GPIOE工做*/
     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
    
    /* 配置PA0引腳爲輸入模式 */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                //第PA0號引腳
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;            //輸入模式
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //引腳的的工做速度最高爲100MHz,最低爲2MHz,工做速度越高,功耗就越高
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;        //不須要上拉電阻
    GPIO_Init(GPIOA, &GPIO_InitStructure);                  //初始化端口A    
    
    /* 配置PA0引腳爲輸入模式 */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;                //第PE二、PE3和PE4號引腳
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;            //輸入模式
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //引腳的的工做速度最高爲100MHz,最低爲2MHz,工做速度越高,功耗就越高
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;        //不須要上拉電阻
    GPIO_Init(GPIOE, &GPIO_InitStructure);                  //初始化端口E    
    
    
}

int main(void)
 {
     init_led();
     init_key();
     GPIO_SetBits(GPIOF,GPIO_Pin_9);  //PF9引腳爲高電平,led燈滅
     GPIO_SetBits(GPIOF,GPIO_Pin_10);  //PF10引腳爲高電平,led燈滅
     GPIO_SetBits(GPIOE,GPIO_Pin_13);   //PE13引腳爲高電平,led燈滅
     GPIO_SetBits(GPIOE,GPIO_Pin_14);   //PE14引腳爲高電平,led燈滅
     while(1)
     {
        if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 0)  //讀取PA0引腳的電平,低電平,按鈕按下
        {
             GPIO_ResetBits(GPIOF,GPIO_Pin_9);//PF9引腳爲低電平,led燈亮
        }
        if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) ==1) //讀取PA0引腳的電平,高電平,按鈕按釋放
        {
             GPIO_SetBits(GPIOF,GPIO_Pin_9);  //PF9引腳爲高電平,led燈滅
        }
        
       if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) == 0) //讀取PE2引腳的電平,低電平,按鈕按下
        {
             
           GPIO_ResetBits(GPIOF,GPIO_Pin_10);//PF10引腳爲低電平,led燈亮
        }
         
       if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) == 1) //讀取PE2引腳的電平,高電平,按鈕按釋放
        {
             GPIO_SetBits(GPIOF,GPIO_Pin_10);  //PF10引腳爲高電平,led燈滅
        }
       
        if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == 0) //讀取PE3引腳的電平,低電平,按鈕按下
        {
             
           GPIO_ResetBits(GPIOE,GPIO_Pin_13);//PF10引腳爲低電平,led燈亮
        }
         
        if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) == 1) //讀取PE3引腳的電平,高電平,按鈕按釋放
        {
             GPIO_SetBits(GPIOE,GPIO_Pin_13);  //PF10引腳爲高電平,led燈滅
        }
       
        if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) == 0) //讀取PE4引腳的電平,低電平,按鈕按下
        {
             
           GPIO_ResetBits(GPIOE,GPIO_Pin_14);//PF10引腳爲低電平,led燈亮
        }
         
       if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) == 1) //讀取PE4引腳的電平,高電平,按鈕按釋放
        {
             GPIO_SetBits(GPIOE,GPIO_Pin_14);  //PF10引腳爲高電平,led燈滅
        }
     }
 }
相關文章
相關標籤/搜索