问题:在给gd32f303单片机封装串口驱动时,发现接收端乱码。
解决:经排查发现是系统时钟不准。经过调整内部时钟后成功解决问题。
注:异步通信协议uart依赖双方时钟的准确,任一方时钟不准都会导致乱码问题。
其他导致串口出问题的原因:
1、分开的两台不同电源的设备间不共地
2、两台设备波特率、停止位、检验位的设置不同
3、设备没有供电
4、波特率设置太高超过当前环境的信号线的传输极限
5、程序中串口没有正确初始化
6、同一引脚在代码不同地方初始化为不同功能,当程序执行时串口收发偶然受到干扰导致某些字节传送乱码
7、某些用gpio口模拟串口的,芯片本身的io引脚翻转速率达不到,导致看似代码正常但示波器测量是一个尖峰,这种情况建议拉低波特率。
8、传输线太长,偶然耦合了一些感应电压导致某些字节误码
本文介绍了在封装GD32F303单片机串口驱动时遇到的乱码问题,问题根源在于系统时钟不准确。调整内部时钟后解决了问题。同时列举了其他可能导致串口通信故障的因素,包括电源不共地、波特率设置不一致、设备未供电、波特率过高、串口初始化错误、引脚功能冲突、模拟串口速度限制及传输线感应电压等。

739

被折叠的 条评论
为什么被折叠?



