1.在中断函数中,最好不要执行耗时间过长的代码,中断函数要简短快速。否则主程序会有严重的堵塞。
2.尽量不要在中断函数与主函数调用相同的函数或者操作同一个硬件。
为什么OLED会显示错误
如果在主程序里和中断里都调用OLED。对于外部硬件不像CPU 有现场保护,中断返回后可能会出现问题。
可以在中断里操作变量或者标志位,当中断返回时,再对这个变量进行显示和操作。
例如 对射式红外传感器计次时,只操作变量,然后在OLED显示函数中调用返回CountSensor_Count的函数
uint16_t CountSensor_Get(void)
{
return CountSensor_Count;
}
void EXTI15_10_IRQHandler(void)
{
//先判断是不是我们设置的EXTI_14
if(EXTI_GetITStatus(EXTI_Line14)==SET)
{
/*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*/
if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0)
{
CountSensor_Count ++;
}
}
//每次中断程序结束要清除标志位
EXTI_ClearITPendingBit(EXTI_Line14);
}