跟猫一起酸汤面系列:第四天 按键中断

原计划是RTC中断的,睡9秒钟,唤醒1秒钟,牵扯比较多的技术点,搞不定
第四天险些难产,降低标准,目标按键中断
猫说涉两个技术NVIC和EXTI,找文章做起来《一知半解学CubeMX——GPIO:外部(按键)中断》
1、定义一个中断脚PA7(GPIO_EXTI7),GPIO属性钟设置上拉
2、NVIC中打开EXTI line 4 to 15,对应代码

/*Configure GPIO pin : KEY_Pin */
GPIO_InitStruct.Pin = KEY_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(KEY_GPIO_Port, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI4_15_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);

3、新建中断处理函数

/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if (GPIO_Pin == KEY_Pin)
    {
        HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
    }
}
/* USER CODE END 4 */

4、低电平触发,不过没有防抖,据说在中断中HAL_Delay是不起作用的,猫说:可以是可以,不过一般不这么做

参考文献:
https://blog.csdn.net/xukao5671927/article/details/78436154
https://blog.csdn.net/weixin_43892323/article/details/104383560

标签: none

添加新评论