stm32:用中断检测按钮是否按下
核心痛点使用中断时使用HAL_Delay会让系统卡死我们需要别的消抖方式解决办法在按键的EXTI中断中仅标记flag并启用一个定时器用其来计时20ms具体实现1、GPIO配置PE4用户标签KEY0模式GPIO_EXTI4下降沿触发上拉2、定时器配置TIM2,Internal Clock,Prescaler:72-1,Counter Period:20000-1,NVIC使能中断3、代码//USER CODE BEGIN PV volatile uint8_t key_flag 0//USER CODE BEGIN 4 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin KEY0_Pin) { if (key_trigger 0) // 防止重复触发 { key_trigger 1; HAL_TIM_Base_Start_IT(htim2); // 启动 20ms 消抖定时器 } } } void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim-Instance TIM2) { HAL_TIM_Base_Stop_IT(htim2); // 停止定时器 key_trigger 0; // 清除触发标志 // 消抖后读取真实电平 if (HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin) GPIO_PIN_RESET) { //按下按钮后进行的操作 } } }
上一篇/下一篇内容由系统自动关联
返回资讯列表 →