打印

STM32关总中断时遇到中断怎么办?现在出现问题。

[复制链接]
5783|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
MakeBetter|  楼主 | 2011-9-4 20:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
情况是这样的:我程序本来好好的正常运行,后面加了一个模块,程序出现了问题,调试发现是不停的进串口中断,但却即不是接收也不是发送中断(我只开了这两个中断)。
因为我添加的程序部分加了重入保护(函数类似于进入临界保护),以__CPSID_I函数关闭了总了中断。所以我分析原因是:
我在程序中,函数里关闭总中断后,因时时间较久,而串口速度较快(115200),且一直不停接收,导致一个字节接收好之前还未打开总中断,而后,再次打开总中断后,接收出现错误,不再是接收中断标志,而是一种我未使能的其它中断(没有一种一种测,尝试过清除溢出和出错两个,都不是),从而导致程序卡死在不停的中断中。
分析原因后,我将CPU速度从原来的64MHz调整到72MHz,结果问题解决。

虽然问题用别的方法解决,且原因也找到了,但解决不了关键原因,找不出是什么中断,不知串口为何会进入了种我未打开的中断,心里有个坎,请大家来看看,分析一下,有机会测试一下,或许,这是STM32的一个BUG?
沙发
yinyangdianzi| | 2011-9-5 10:38 | 只看该作者
mark
LZ帮你顶一下,,,希望早日解决

使用特权

评论回复
板凳
zhangjunye| | 2011-9-5 10:56 | 只看该作者
临界段本来就不能太长,而且你的临界段如果没有必要关所有中断就不用关所有中断。

使用特权

评论回复
地板
handlike| | 2011-9-5 11:58 | 只看该作者
这个问题不是太难,找到USARTx->SR看一下SR内存中的内容就清楚是哪个中断了。
如果是USART1则在仿真进入中断时查一下0x42013800处的内容,其它串口2,串口3等自己查。

使用特权

评论回复
5
MakeBetter|  楼主 | 2011-9-5 20:12 | 只看该作者
to 2f:谢谢
to 3f:不知道模块会被用到哪些场合里面,所以关了总中断,如果单纯在此次应用,完全没有必要关中断,所以也不存在以上问题。
to 4f:谢谢你的建议,我调试时已看过寄存器SR,不管是正常还是不正常,都是:TC 和 TXE 两个位置1,说明是发送中断和发送完成中断,因为我的串口操作时,从没有清除过标志,只是在不需要时,关掉自己的中断,所以这两位置1也可以说正常,其它位没有任何标志。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

506

帖子

0

粉丝