STM32
直播中

mintsy

8年用户 1480经验值
擅长:MEMS/传感技术
私信 关注
[问答]

stm32f0读写内部flash和刷新液晶屏时,禁止所有中断,__disable_irq();不起作用,还会进入中断响应函数为什么?

读写内部flash和刷新液晶屏时,禁止所有中断,__disable_irq();不起作用,还会进入中断响应函数

回帖(1)

淡淡的爱

2024-5-9 16:19:08
在STM32F0系列微控制器中,使用`__disable_irq()`宏来禁止所有中断。然而,您提到在使用该宏时,中断响应函数仍然被调用。这可能是由以下几个原因导致的:

1. **中断优先级**:STM32F0支持不同优先级的中断。`__disable_irq()`宏禁用了所有非特权级中断,但特权级中断(如NMI和HardFault)仍然可以被触发。请确保您的中断响应函数不是由这些特权级中断触发的。

2. **中断使能状态**:在调用`__disable_irq()`之前,确保没有其他代码使能了中断。这可能是由于其他代码段或库函数使能了中断,导致中断响应函数被调用。

3. **中断向量表**:确保您的程序没有错误地修改了中断向量表,导致中断响应函数被错误地调用。

4. **编译器优化**:有时编译器优化可能会导致`__disable_irq()`宏被忽略或优化掉。尝试在调用该宏的代码前后添加`volatile`关键字,以防止编译器优化。

5. **硬件问题**:如果以上原因都被排除,那么可能是硬件问题导致的。检查您的STM32F0微控制器是否正常工作,以及是否有外部因素(如电源波动、电磁干扰等)导致中断响应函数被调用。

为了解决这个问题,您可以尝试以下步骤:

1. 确保您的中断响应函数不是由特权级中断(如NMI和HardFault)触发的。

2. 检查您的代码,确保在调用`__disable_irq()`之前没有其他代码使能了中断。

3. 检查您的中断向量表,确保没有错误地修改了中断向量表。

4. 在调用`__disable_irq()`的代码前后添加`volatile`关键字,以防止编译器优化。

5. 如果问题仍然存在,尝试检查您的STM32F0微控制器硬件,确保其正常工作,并且没有外部因素导致中断响应函数被调用。

希望这些建议能帮助您解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分