在数据量大时 , UART接收中断函数耗时、优先级低等情况下容易丢失数据 。
解决办法:
- 中断函数里减少不必要的耗时
- 合理分配中断优先级
- 使能中断前清除标志位
在通信波特率较高的情况下 , 如果时钟误差加大 , 很可能导致数据丢失 。
解决办法:
- 使用更高精度晶振
- 降低通信波特率
UART发送丢失数据很多工程师都遇到过 , 通常情况下是传输未完成的原因 。
HAL库已经有几年了 , 但还是有很多工程师都使用标准外设库 , 这时如果自己封装接口不当 , 就会存在发送最后一字节数据丢失的问题 。
1.UART传输未完成导致数据丢失
如下代码 , 只考虑非空 , 但实际传输并未完成 。
但发送非空不代表发送完成 , 虽然在某些场合更高效 , 但某些场合就会导致数据丢失 。
比如:使用此函数发送之后进入休眠、关闭接收端设备电源等情况下 。
解决办法:
等待发送完成:
如果使用标准外设库 , 要根据实际情况封装函数 , 比如发送超时 。
或者使用HAL封装的接口 , 代码包含判断传输完成:
2.线路延时导致数据丢失
UART通常会使用232或者485以增加传输距离和增强干扰 。 但是一旦数据线路太长就存在传输延时的情况 , 特别是485传输长距离 , 并使用MCU控制传输方向的情况下 。
解决办法:
- 软件增加延时处理
- 使用通信协议增加应答机制
UART应用的场景比较多 , 有些应用在复杂的工厂 , 干扰较大从而导致数据丢失;有些应用在温差较大的环境 , 时钟偏移较大导致数据丢失 。
解决办法需要根据实际情况 , 有针对性解决问题 。 比如:使用更好的通信线 , 软件做好容错处理等 。
声明:
【北京海洋馆|串口丢数据的几个常见原因】本文转载自嵌入式专栏 , 作者strongerHuang, 如涉及作品内容、版权和其它问题 , 请于联系工作人员 , 我们将在第一时间和您对接删除处理!
- “北京的士”上线半年:驾驶员增收20%
- 中国互联|北京大美寰宇影业有限公司残影空间企业谈中国互联网企业路在何方
- 北京市海淀区2022年高三一模数学试题及参考答案
- 黑匣子|两个黑匣子都送至北京 东航事故调查何时有结论?专家解读
- 本文转自:北京商报面对突如其来的新一轮新冠疫情|逆行抗疫中的京东方 不可忽视的“科技抗疫”力量
- 北京玉渊潭公园樱花节随手拍:北京的春天又要刷屏了
- 北京市|互联网人求职难:几百人抢一个岗位,三面时HC被锁
- 中关村在线|315点名“高速下载”陷阱!北京通报:中关村在线罚款三万元
- 微博显示IP地址后:马斯克在北京,罗永浩在浙江,海外大V们在国内…
- 本文转自:北京商报枕头和眼罩大家日常都用得多了|为了让产品有更好的体验,无限极把这个技术安排上了