前面我们介绍过gd32 485发送时出现异常的最常见原因,有小伙伴反馈想要知道gd32 串口接受异常的可能原因,今天我们就来安排。
一、波特率异常导致收发出错
我们知道,串口是异步通讯接口,通讯双方或者多方都需要工作在相同波特率下,如果波特率不对,则发送和接收都会异常。通常引起波特率异常的原因有以下几种:
外部晶振频率设置错误
gd32 固件库中,波特率的运算是需要去获取挂载这个串口的内部总线的频率
而获取总线频率的的函数中需要用到hxtal_value这个值,即外部晶振的实际频率。
gd32库中这个值默认是8m或25m,而有的小伙伴在用其他频率的晶振时,虽然根据实际频率修改了配置主频的函数,但没将hxtal_value这个值修改为实际值,就会导致配置出来的波特率和预想不符,从而导致波特率异常。
晶振频偏
如果外部和内部晶振出现频偏,也会导致波特率频偏,这个很好理解,那么频偏多少会出现异常呢?根据实际测试和经验,晶振出现2%的频偏,就会导致串口异常。如果使用的外部晶振,可以直接测量晶振的波形:
如果是用的内部晶振,可以通过pa8口输出内部晶振频率,再测量pa8口波形即可(如何使用pa8输出内部频率,后面也会出教程哦)。至于为什么超过2%就出现异常,小伙伴们可以自己思考下哦。
二、接受过载
当串口接收线上数据量较大,而软件由于一些原因比如需要处理更高优先级的任务时,就可能会发生数据寄存器和移位寄存器中的数据都还没有被读走的情况下,又接收到新的数据,此时串口发生接收过载。
串口状态寄存器中的orerr位将会置“1”,新的数据也将不会被接收到mcu中,从而导致数据丢失。
该问题的解决办法:
(1)使用中断进行数据接收,且适当提高中断优先级,同时需要打开接收过载中断,当发送过载时表示有数据丢失,可以对这一帧数据做算法处理;
(2)使用dma接受数据,因为dma不需要cpu参与,故一般情况下不会出现接收过载。
三、接收的数据起始位不标准
我们知道,串口每个byte的数据都有一个起始位,占一个bit时间,如果由于一些原因导致对方发过来的数据起始位过短的话,mcu就无法识别到这个起始位,从而这个byte的数据就不会被接收。小编就见过因为加了隔离芯片导致起始位变短,而传输的第一个数据bit位变长,虽然这个byte的数据时间是符合波特率的,但由于起始位不标准,也将导致接收异常。
实际上这个问题只会在gd部分芯片上出现,比如gd32f405/407/450,这是因为这几颗芯片串口起始位的检测比较严苛,而gd32有的型号做了起始位检测优化,比如gd32f30x、f425/427/470系列,就不会出现这样的问题。
四、干扰
串口的发送和接收,实际上就是一串波形,当波形收到干扰时,也会出现通信异常。这种情况下,小伙伴们就要去通过硬件的方式去过滤到干扰源就可以解决问题了。
以上,就是小编总结的几点串口接收异常的可能原因,小伙伴们有知道其他原因的,欢迎在评论区交流哦。
彩电出现回扫线故障的原因及特征
Transphorm推出顶部散热型TOLT封装FET器件, 助力计算、人工智能、能源和汽车电源系统实现卓越的热性能和电
气密性检测仪在医疗器械检测中的应用
比科奇与微电子所达成战略合作协议
磁环颜色代表什么 磁环的颜色有什么区别
GD32 串口接受异常的几个原因
「应用笔记」激光二维码导航混合制图
MLX91802应用于TPMS系统级封装解决方案 实现固件“即买即用”
手机大厂也来抢一杯羹 TWS蓝牙耳机市场今年预增长52.9%
防爆电动执行器的安装和连接
酷博呼叫中心系统
2025年电动车充电桩将超过50万
为什么选择USB-C作为您的下一个工业解决方案
卡塔尔航空计划在2024年用波音777X飞机替换机队中的A380飞机
wlan是无线网还是局域网 wlan包括哪些无线局域网协议
工业自动化控制成趋势 未来的发展潜力巨大
宁德时代将向宝马高端电动车型iNEXT供应电芯
受惠电动汽车增长 2020年GaN功率器件市场规模将达6亿美元
富士康A股IPO进程按下快进键 独角兽的春天要来了
业务下滑,三星关停天津手机工厂向东南亚市场转移