stm32f103zet红牛开发板STMcubeMX hal库版:04旺宝-红牛-按键中断 EXIT
实验目的:给按键的下降沿设置中断事件来控制led、
实验现象:程序运行后,按下USER1,LED1亮,再按USER1,LED1灭.
在针脚上选exit
选下降沿中断
不修改优先级
在main.c里加入回调函数。这个函数会覆盖库里边的同名空函数
/** * 函数功能: 按键外部中断服务函数 * 输入参数: GPIO_Pin:中断引脚 * 返 回 值: 无 * 说 明: 无 */ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin==USER1_Pin) { HAL_Delay(20);//使用这个必须降低EXIT的中断抢先级别 //for(int i=0; i<100000;i++){} if (HAL_GPIO_ReadPin(USER1_GPIO_Port,USER1_Pin)==0) { LED_Toggle(1); } __HAL_GPIO_EXTI_CLEAR_IT(USER1_Pin); } }
发现使用hal-delay会卡死程序。原因hal-delay用的是systemtic的中断。这里俩中断优先顺序一样了、并且cubeMX并不会自动生成它的优先级代码。默认就是最高级别0
解决办法 1 使用空循环延时
2 把exit的中断级别往下降。