打印
[STM32L5]

【STM32L562E-DK试用】2.按键检测

[复制链接]
46|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
STM32L562E-DK预置了一个可编程按键,接在了PC13上,高电平触发

打开之前创建的工程,由于之前选择的是开发板生成的工程,生成工程时已经将按键的初始化代码写进去了,不需要再重新写初始化代码,我们只需要调用即可。
先以轮询方式实现按键检测,按键轮询是间隔很短时间不断查询GPIO电平状态,判断电平是否有发生改变,从而得知是否有按键动作,需要注意的是按键在按下或释放的过程中,可能会伴随抖动,如图示意

在这抖动过程中,会产生多次高低电平,如果不加处理会被识别为多次按键操作,因此为了避免误判需要进行去抖处理,一般软件上可以用延时来去抖
用轮询的方式写个按键检测程序,用按键控制2个LED的亮灭,代码实现如下
void AppUserLoop(void)
{
    if(LL_GPIO_IsInputPinSet(USER_BUTTON_GPIO_Port,USER_BUTTON_Pin))
    {
        LL_mDelay(20);
        if(LL_GPIO_IsInputPinSet(USER_BUTTON_GPIO_Port,USER_BUTTON_Pin))
        {
            LL_GPIO_TogglePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin);
            LL_GPIO_TogglePin(LED_RED_GPIO_Port,LED_RED_Pin);
            while(LL_GPIO_IsInputPinSet(USER_BUTTON_GPIO_Port,USER_BUTTON_Pin));
        }
    }
}


在主循环中调用AppUserLoop,运行效果如下

接下来用中断方式实现按键检测,与上面的轮询方法不同,这种方式并不用一直查询GPIO的状态,按键状态改变时会产生中断,程序在检测到中断后再判断按键状态,接下来用STM32CubeMX配置这个按键的中断,双击工程目录中的这个.ioc文件打开STM32CubeMX

选中PC13在右侧的pinout view中对应的引脚会闪烁

用鼠标左键点击这个引脚,把它配置成中断模式,GPIO mode设置成上升沿检测

切换到NVIC标签,使能中断

点击GENERATE CODE,再重新打开MDK,可以看到中断初始化和中断处理方法都添加好了

修改一下刚才的程序,增加一个标识,中断触发后标识置1,主循环中检测到标识被置1后再检测按键是否被按下,代码实现如下
uint8_t user_button_int_flag = 0;
void EXTI13_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI13_IRQn 0 */

  /* USER CODE END EXTI13_IRQn 0 */
  if (LL_EXTI_IsActiveRisingFlag_0_31(LL_EXTI_LINE_13) != RESET)
  {
    LL_EXTI_ClearRisingFlag_0_31(LL_EXTI_LINE_13);
    /* USER CODE BEGIN LL_EXTI_LINE_13_RISING */
    user_button_int_flag = 1;
    /* USER CODE END LL_EXTI_LINE_13_RISING */
  }
  /* USER CODE BEGIN EXTI13_IRQn 1 */

  /* USER CODE END EXTI13_IRQn 1 */
}
void AppUserLoop(void)
{
    if(user_button_int_flag != 0)
    {
        user_button_int_flag = 0;
        LL_mDelay(20);
        if(LL_GPIO_IsInputPinSet(USER_BUTTON_GPIO_Port,USER_BUTTON_Pin))
        {
            LL_GPIO_TogglePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin);
            LL_GPIO_TogglePin(LED_RED_GPIO_Port,LED_RED_Pin);
        }
    }
}


改好后的运行效果和之前轮询模式一样,可以正常通过按键切换2个LED的状态,这里就不重复展示了


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:同飞软件研发工程师
简介:制冷系统单片机软件开发,使用PID控制温度

153

主题

749

帖子

7

粉丝