为什么这里EXTI15_10中断服务函数里获取中断标志位换成==set就不行了呢?
中断打开了吗?把中断初始化程序看下!
不知道你这个问题是否已经解决, 如果还没有解决的话:回答:
首先,需要了解“|=”和“==set”的区别。
“|=”表示按位或赋值,即将左操作数和右操作数进行按位或运算,再将结果赋值给左操作数。
“==set”是通过调用库函数来获取中断标志位状态的。
在EXTI15_10中断服务函数中,我们需要获取和清除中断标志位来避免在执行中断服务函数时出现误触发。通常情况下,我们需要将中断标志位清零,这是在执行中断服务函数开始前必须完成的一项操作。
在使用“|=”操作时,只要中断标志位被置为1,就会执行中断服务函数。但是,在使用“==set”操作时,我们需要先判断中断标志位是否被置为1,如果是,则执行中断服务函数,并清零中断标志位。
如果在EXTI15_10中断服务函数中将获取中断标志位的方式从“|=”换成“==set”,但没有正确地进行中断标志位的清零操作,那么下次中断服务开始前,中断标志位仍然为1,将会导致该中断服务被误触发。
因此,正确的处理方式应该是使用“==set”来判断中断标志位是否被置为1,然后在执行中断服务函数前将该中断标志位清零。
示例代码如下:
void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line10) == SET) // 判断中断标志位是否被置为1
{
EXTI_ClearITPendingBit(EXTI_Line10); // 清零中断标志位
// 执行中断服务函数
}
}