zoukankan      html  css  js  c++  java
  • stm32按键配置

    前言:我们都知道开发板上除了有经典的流水灯之外,还有一个必备的练习硬件--按键(key),下面继续来完成按键的配置。

     1、通过查看原理图,找出按键(key)的管脚名字和对应芯片上的I/O口,四个I/O分别为PA0、PE2、PE3和PE4。

    2、配置按键I/O口这里要注意的是工作模式要改成输入模式,不是led的输出模式,并且不需要设置输出模式。

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

    3、获取按键的按下和释放的状态

    //读取PA0引脚的电平,低电平,按钮按下
    GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 0
    //高电平,按钮释放
    GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1
    

     

    4、下面是具体代码,实现了按下一个按键对应的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;                //第PE2、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灯灭
            }
         }
     }

     

  • 相关阅读:
    ProgressBar 自我学习笔记(二)
    使用UIElement.AddHandler捕获已被处理的RoutedEvent
    Windows Phone 7 Tombstoning with MVVM and Sterling
    向256 MB内存的Windows Phone提供应用的最佳实践指导
    ICommand分享学习
    ProgressBar 自我学习笔记(一)
    [转] 利用fiddler为windows phone模拟器抓包
    【推荐】Windows Phone各版本历史!
    Windows Phone内存管理的演变[E800]
    Ckeditor和ckfinder完美结合,配置使用说明
  • 原文地址:https://www.cnblogs.com/wurenzhong/p/8496056.html
Copyright © 2011-2022 走看看