STM32串口发送的标志位TC和TXE的区别,到底用哪一个

2019-12-29 18:27发布

STM32串口发送的bug也是经历之后才发现的。

之前我的做法都是先清除TC位才开始发送。

今天看手册的时候,注意到手册里面这样描述的:

无标题.jpg (164.41 KB, 下载次数: 0) 下载附件 2015-1-5 13:24 上传

TC是多缓冲通信才使用,TXE是单缓冲使用。

我不明白什么是多什么是单,串口发送就一个字节一个字节往移位寄存器送嘛。

求指点!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
simplorer
1楼-- · 2019-12-29 19:45
我一直用TC,因为我设计的环形队列使用TXE会多进一次中断,不好判断发送情况,极端情况下,甚至会多发送一个字节的数据,造成数据队列错误。
xyzabc
2楼-- · 2019-12-29 20:35
TXE是发送缓冲区空,这时候可以向其写入要发送的数据,TC是发送完成,这个表示不仅发送缓冲区是空的,而且最后一个字节也发送完成了
happyliu
3楼-- · 2019-12-29 22:39
RS485通讯时,先置发送状态,再启动发送,在TXE中断装载后续数据,当数据都发送完成后使能TC中断,在TC中断时置接收状态,完成一次数据发送过程,一个是发送数据寄存器空中断,是为了加快发送速度的,可以做到字节间无间隔发送。另一个是移位寄存器,是数据真实移位发送到传输线上了。
sunliezhi
4楼-- · 2019-12-30 01:37
有多个字节的数据要发送时,先使能TXE,在TXE中断中装载后续数据;
当装载最后一个字节后,使能TC中断,失能TXE中断,表明一旦有TC中断到来,所有的发送全部结束了
sunliezhi
5楼-- · 2019-12-30 02:16
 精彩回答 2  元偷偷看……
sunliezhi
6楼-- · 2019-12-30 03:13
也就是说发送缓冲区空并不代表数据已经发送出去了,1字节数据从缓冲区成功到总线上,要经过并转串这么一个过程,也许数据刚离开缓冲区,正在并转串呢

一周热门 更多>