打印

GD32F350.串口速率问题

[复制链接]
900|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaoqi000|  楼主 | 2022-12-31 23:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 在最近使用GD32F350的时候需要将串口速率配置到4M并且是TTL电平下使用,查看数据手册发现当时钟频率为108MHz,过采样为8,最高速度可达6.75MBits/s,因此4M速率是可以达到的。

测试条件:GD32F350与STM32F103在4M下单字节通讯
问题现象:串口误码严重

最开始排查是否是传输线过长导致,缩短线距到5CM,问题没有得到解决
怀疑STM32F103这边问题,用两个STM32在4M下通讯完全没有误码现象

使用特权

评论回复
评论
xiaoqi000 2022-12-31 23:40 回复TA
———————————————— 版权声明:本文为CSDN博主「Mapoplus」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_50660070/article/details/127989169 
沙发
xiaoqi000|  楼主 | 2022-12-31 23:42 | 只看该作者
问题指向GD32F350,串口通过总线APB2时钟来配置速率,根据需求的波特率、过采样值和外部时钟计算得出波特率分频系数,这是一个16位的数字,包含12位整数部分和4位小数部分。波特率发生器使用这两部分组合所得的数值来确定波特率。由于具有小数部分的波特率分频系数,将使USART能够产生所有标准波特率 去配置串口整数寄存器和小数寄存器。
计算式
USARTDIV= PCLK / 过采样值 × Baud Rate

使用特权

评论回复
板凳
xiaoqi000|  楼主 | 2022-12-31 23:43 | 只看该作者
时钟树配置为:采用外部8M时钟经PLL倍频后产生108M主频,总线APB2默认最高54M,
查看发现4M串口速率不是54M的整数倍,分频系数必然产生小数部分;怀疑会导致波特率不准。

改进措施:更改主频到96M,二分频产生APB2时钟48M,满足整数倍关系。

再次测试没有出现误码情况。

使用特权

评论回复
地板
hilahope| | 2023-1-5 17:55 | 只看该作者
你可以尝试3Mhz的频率。              

使用特权

评论回复
5
chenjun89| | 2023-1-5 23:33 | 只看该作者
4MHZ的速率,只有芯片对芯片板上通信了。

使用特权

评论回复
6
hilahope| | 2023-1-6 18:37 | 只看该作者
这个串口的波特率这么大的吗?              

使用特权

评论回复
7
tifmill| | 2023-1-6 19:09 | 只看该作者
之前最大测试过1.5M的波特率。

使用特权

评论回复
8
51xlf| | 2023-1-6 20:51 | 只看该作者
这个好像达不到这么大频率呢              

使用特权

评论回复
9
tabmone| | 2023-1-6 21:21 | 只看该作者
4Mhz的频率有点牛了。              

使用特权

评论回复
10
tpgf| | 2023-2-1 09:31 | 只看该作者
咨询个问题 就是什么叫做串口的过采样呢

使用特权

评论回复
11
nawu| | 2023-2-1 10:42 | 只看该作者
tpgf 发表于 2023-2-1 09:31
咨询个问题 就是什么叫做串口的过采样呢

可以变相理解为ad采样 啊 也是为了怕通讯的时候电平读取错误

使用特权

评论回复
12
aoyi| | 2023-2-1 12:11 | 只看该作者
标准UART可以选16倍采样,也可以选64倍采样,个人觉得应该是方便分频设计

使用特权

评论回复
13
zljiu| | 2023-2-1 13:13 | 只看该作者
在t1时刻若检测到低电平,就开始对这个低电平进行连续的检测

2.  当检测了8个时钟周期后,到达t2,此刻,若前面的8个周期都是低电平,则认为检测到了起始脉冲。否则就认为是干扰,重新检测。

3.  在检测到起始位后,再计数16个采样时钟周期就到达了第一个数据位的时间中间点t3,在此刻采样数据并进行保存。

4.  然后再经过16个周期,就是第二个数据位的时间中间点,在此时刻进行采样;然后,再经过16个周期,就是第三个数据位的时间中间点, 在此时刻进行采样…..一直这样采样,直到把所有的数据位采样完毕。

使用特权

评论回复
14
gwsan| | 2023-2-1 13:28 | 只看该作者
标准UART的RXD前端有一个"1到0跳变检测器",当其连续接受到8个RXD上的地电平时,该检测器就认为RXD线出现了起始位,进入接受数据状态.在接受状态,接受控制器对数据位7,8,9三个脉冲采样,并遵从三中取二的原则确定最终值.采用这一方法的根本目的还是为了增强抗干扰,提高数据传送的可靠性,采样信号总是在每个接受位的中间位置,可以避开数据位两端的边沿失真,也可以防止接受时钟频率和发送时钟频率不完全同步引起的误差.

使用特权

评论回复
15
tfqi| | 2023-2-1 14:03 | 只看该作者
估计是波特率的配置出现了问题或者是时钟有问题

使用特权

评论回复
16
Jacquetry| | 2023-3-2 20:22 | 只看该作者
是不是波特率的问题啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

718

帖子

0

粉丝