搜索
bottom↓
回复: 8

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

[复制链接]

出5入42汤圆

发表于 2015-1-5 13:25:12 | 显示全部楼层 |阅读模式
STM32串口发送的bug也是经历之后才发现的。

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

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



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

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

求指点!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-1-5 13:43:12 | 显示全部楼层
我一直用TC,因为我设计的环形队列使用TXE会多进一次中断,不好判断发送情况,极端情况下,甚至会多发送一个字节的数据,造成数据队列错误。

出0入0汤圆

发表于 2015-1-5 14:28:55 | 显示全部楼层
TXE是发送缓冲区空,这时候可以向其写入要发送的数据,TC是发送完成,这个表示不仅发送缓冲区是空的,而且最后一个字节也发送完成了

出0入0汤圆

发表于 2015-1-5 14:32:45 | 显示全部楼层
RS485通讯时,先置发送状态,再启动发送,在TXE中断装载后续数据,当数据都发送完成后使能TC中断,在TC中断时置接收状态,完成一次数据发送过程,一个是发送数据寄存器空中断,是为了加快发送速度的,可以做到字节间无间隔发送。另一个是移位寄存器,是数据真实移位发送到传输线上了。

出0入4汤圆

发表于 2015-1-5 23:15:07 | 显示全部楼层
有多个字节的数据要发送时,先使能TXE,在TXE中断中装载后续数据;
当装载最后一个字节后,使能TC中断,失能TXE中断,表明一旦有TC中断到来,所有的发送全部结束了

出0入4汤圆

发表于 2015-1-5 23:23:16 | 显示全部楼层
就好比一条生产拉的拉头和拉尾:
一旦拉头有空出位置来,你就放一个待加工品上去补位,..... 直到所有待加工的半成品都放上拉头之后(相当于TXE),你就可以专注于拉尾什么时候流走最后一个工件了(相当于TC)

出0入4汤圆

发表于 2015-1-5 23:31:58 | 显示全部楼层
也就是说发送缓冲区空并不代表数据已经发送出去了,1字节数据从缓冲区成功到总线上,要经过并转串这么一个过程,也许数据刚离开缓冲区,正在并转串呢

出0入0汤圆

发表于 2016-10-8 13:42:30 | 显示全部楼层
说的非常有道理实际测试看看  感觉对485通讯很实用

出0入0汤圆

发表于 2017-5-12 11:16:32 | 显示全部楼层
感谢楼上各位的分析,加深了对串口发送的理解
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 04:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表