情况是这样的:我程序本来好好的正常运行,后面加了一个模块,程序出现了问题,调试发现是不停的进串口中断,但却即不是接收也不是发送中断(我只开了这两个中断)。
因为我添加的程序部分加了重入保护(函数类似于进入临界保护),以__CPSID_I函数关闭了总了中断。所以我分析原因是:
我在程序中,函数里关闭总中断后,因时时间较久,而串口速度较快(115200),且一直不停接收,导致一个字节接收好之前还未打开总中断,而后,再次打开总中断后,接收出现错误,不再是接收中断标志,而是一种我未使能的其它中断(没有一种一种测,尝试过清除溢出和出错两个,都不是),从而导致程序卡死在不停的中断中。
分析原因后,我将CPU速度从原来的64MHz调整到72MHz,结果问题解决。
虽然问题用别的方法解决,且原因也找到了,但解决不了关键原因,找不出是什么中断,不知串口为何会进入了种我未打开的中断,心里有个坎,请大家来看看,分析一下,有机会测试一下,或许,这是STM32的一个BUG? |