打印

STM32UART的诡异问题,太诡异以致不知如何入手查下去

[复制链接]
1836|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bobo5650|  楼主 | 2011-6-15 17:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我计划用TC中断发送缓存区里的一段数据,所以在系统初始化的时候就使能了TC中断(禁能TXE中断),然后程序跑着跑着出了诡异的问题:
本来我的机器是要作为服务端,要客户端发请求才会回响应的,但是现在我还没从客户端发请求,这边就已经进入TC中断了,更吊诡的是,刚在ISR中清除完TC标志,还没执行后面的中断服务,TC位又被设置起来了,于是又进入了ISR...
我根本没来得及往DR里写东西呀,怎么老就出TC中断呢。
void int_uart_tx2(void)
{
    mClearUart2TxdIntFlag;
sSciTxISR(2);
}
我在sSciTxISR的入口设了断点,只进入过1次,然后就是不停的进入这个函数。往DR写数据的函数有两个,其中一个就是这个sSciTxISR,另一个我也设置了断点,从来就没有跑到过。
顺便问一句,那位大侠了解芯片是怎么判断transfer complete的?
沙发
香水城| | 2011-6-15 18:10 | 只看该作者
状态位反映的是状态,而不是过程;状态是静态的,过程是动态的。

也许发送完成(Transmission Complete)这个名字起的不好,如果叫做“没有正在进行的发送”可能更恰当。

实际上,你应该在客户端发请求,主机端发相应之后再使能TC中断。

使用特权

评论回复
板凳
bobo5650|  楼主 | 2011-6-15 18:23 | 只看该作者
明白了,原来TC跟TXE一样,只表示现在是空闲的,而不是表示刚完成了一个任务。
我之前一直理解为完成发送任务之后才会设置这个标志来着。
So,这种情况下就应该在解析完客户端的请求之后,发出响应的第一个字符之后再使能TC中断,并且在发送完响应的最后一个字符时,立即关闭TC中断?

使用特权

评论回复
地板
handlike| | 2011-6-16 09:02 | 只看该作者
STM32 中USART的发送中断应该是个BUG ,以前用流明(现归TI)没有出现这些让人头疼的问题。

使用特权

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

本版积分规则

4

主题

279

帖子

1

粉丝