今天发现外部中断同一个中断服务子函数不能判断中断源。如下面所示,假设发生了line9中断,line5处理函数1也会执行,假设发生了line9中断,处理函数2也会执行。void EXTI9_5_IRQHandler(void)//中断服务函数,如果中断线是5-9。
{
if(EXTI_GetITStatus(EXTI_Line5) != RESET)
{
处理函数1
EXTI_ClearITPendingBit(EXTI_Line5);
}
if(EXTI_GetITStatus(EXTI_Line9) != RESET)
{
处理函数2
EXTI_ClearITPendingBit(EXTI_Line9);
}
}
库函数里面清中断标志函数,只会把对应中断标志置1来清除对应中断,所以我觉得应该是假如上一次发生了对应中断,下一次该标志位还是置位,所以即使线中断没有发生,对应处理函数还是会执行。
void EXTI_ClearITPendingBit(uint32_t EXTI_Line)
{
/* Check the parameters */
assert_param(IS_EXTI_LINE(EXTI_Line));
EXTI->PR = EXTI_Line;
}
不知道大家有没有遇到过这样的问题
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
如果想保险一些的话,
可以在中断服务函数中再检测一下对应引脚的电平。
一周热门 更多>