OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6382|回复: 10

请问一下串口通信波特率的问题

[复制链接]

85

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2020-12-5
在线时间
202 小时
发表于 2021-6-29 22:00:11 | 显示全部楼层 |阅读模式
1金钱
使用下图的程序进行波特率设定以及串口能够接受多少字节的测试,发现波特率的设定和串口调试助手接受到的字节数并不匹配。按照波特率的定义115200的波特率意味着每秒可以接受11520个字节,实际测试串口平均每秒10102个字节,这样误差并不是很大,但是如果我波特率设置为1000000时候,本应该一秒接受100000个字节,但是串口调试助手显示每秒只能接收到27219个字节,请问这是什么原因造成的?有没有办法解决?
while.png

最佳答案

查看完整内容[请看2#楼]

如果你发的是Hex,1秒应该收到11520个字节 但你现在发的ASCII, i = 0..9 时 是每个数一字节, 到i=10..99 时每个数两字节, 到i=100..255则每个数三字节 所以i从0到256的字节数 = (1*10 + 2*90+ 3*156) = 658 如果说你不停循环发0..255, 平均是658/256 = 2.57字节每次 , 所以用115200每秒可发的数是 115200/(2.57*10) = 4484.5个数 当你把波特率改为1000000时出现的情况是合理的,每字节的需时是10us, printf函数是需要时 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-6-29 22:00:12 | 显示全部楼层
如果你发的是Hex,1秒应该收到11520个字节
但你现在发的ASCII, i = 0..9 时 是每个数一字节, 到i=10..99 时每个数两字节, 到i=100..255则每个数三字节
所以i从0到256的字节数 = (1*10 + 2*90+ 3*156) = 658
如果说你不停循环发0..255, 平均是658/256 = 2.57字节每次 , 所以用115200每秒可发的数是 115200/(2.57*10) = 4484.5个数

当你把波特率改为1000000时出现的情况是合理的,每字节的需时是10us, printf函数是需要时间执行的,当printf函数执行的时间是>10us, 那自然是不可能达到每秒 100000字节了。
回复

使用道具 举报

12

主题

3402

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8689
金钱
8689
注册时间
2020-5-11
在线时间
4180 小时
发表于 2021-6-30 11:06:33 | 显示全部楼层
楼主,这才几天就忘了。还是说根本就没搞清楚波特率与串口一字节的关系?
专治疑难杂症
回复

使用道具 举报

85

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2020-12-5
在线时间
202 小时
 楼主| 发表于 2021-6-30 11:15:16 | 显示全部楼层
LcwSwust 发表于 2021-6-30 11:06
楼主,这才几天就忘了。还是说根本就没搞清楚波特率与串口一字节的关系?

您好,我理解的是波特率代表1s多少个bit数比如我115200,那么我一秒接受到的bit是115200,一秒接受到的字节就是115200/8bit=14400个字节,这样计算是不是没有问题?那么如果我波特率1000000,那么每秒字节是1000000/8=125000个字节,可我实际却只有27219个字节。请问是我计算的错误嘛,我上面写的只是把一字节8bit简易成10bit的计算
回复

使用道具 举报

12

主题

3402

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8689
金钱
8689
注册时间
2020-5-11
在线时间
4180 小时
发表于 2021-6-30 11:27:53 | 显示全部楼层
本帖最后由 LcwSwust 于 2021-6-30 11:32 编辑
车嘉炜 发表于 2021-6-30 11:15
您好,我理解的是波特率代表1s多少个bit数比如我115200,那么我一秒接受到的bit是115200,一秒接受到的字 ...

哦,你是对的,我老眼昏花看错了,抱歉抱歉。


有些助手反应慢会丢数,
换个助手试试,如sscom5.09

还有就是printf会对数据作处理,会消耗一些时间,你可以用我给的发送字节的函数试试。
专治疑难杂症
回复

使用道具 举报

85

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2020-12-5
在线时间
202 小时
 楼主| 发表于 2021-6-30 11:32:43 | 显示全部楼层
LcwSwust 发表于 2021-6-30 11:27
哦,你是对的,我老眼昏花看错了,抱歉抱歉。

哈哈没事的,感谢您的回复,那我再去试试
回复

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2019-8-12
在线时间
13 小时
发表于 2021-6-30 16:02:55 | 显示全部楼层
起停位不算了???
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-6-30 17:03:10 | 显示全部楼层
车嘉炜 发表于 2021-6-30 11:15
您好,我理解的是波特率代表1s多少个bit数比如我115200,那么我一秒接受到的bit是115200,一秒接受到的字 ...

要加start 和 stop bit, 所以要/10, 而不是除8
回复

使用道具 举报

85

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2020-12-5
在线时间
202 小时
 楼主| 发表于 2021-6-30 17:11:47 | 显示全部楼层
edmund1234 发表于 2021-6-30 16:48
如果你发的是Hex,1秒应该收到11520个字节
但你现在发的ASCII, i = 0..9 时 是每个数一字节, 到i=10..99 ...

感谢您的回复!
回复

使用道具 举报

85

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2020-12-5
在线时间
202 小时
 楼主| 发表于 2021-6-30 18:03:08 | 显示全部楼层
LcwSwust 发表于 2021-6-30 11:27
哦,你是对的,我老眼昏花看错了,抱歉抱歉。

大佬实在抱歉,麻烦您看一下我的新帖子的问题
回复

使用道具 举报

85

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2020-12-5
在线时间
202 小时
 楼主| 发表于 2021-6-30 18:03:35 | 显示全部楼层
edmund1234 发表于 2021-6-29 22:00
如果你发的是Hex,1秒应该收到11520个字节
但你现在发的ASCII, i = 0..9 时 是每个数一字节, 到i=10..99 ...

大佬 麻烦您看一下我新帖子的问题,十分感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-26 07:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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