OpenEdv-开源电子网

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

在单片机里面,波特率和比特率是一回事吗?

[复制链接]

2

主题

10

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-3-28
在线时间
6 小时
发表于 2017-5-9 13:33:18 | 显示全部楼层 |阅读模式
在网上结果里,有各种解释,第一种是说波特率是指单位时间内发出的码元数,而码元可以是由不同的比特位组成,另一种就是说波特率是每秒发出的比特数。我查了两本书,讲的也不是很清楚。郭天祥的书里讲的是 :每秒传输二进制代码的位数,即1波特=1位/秒。 另一本新编CS-51单片机应用设计里,定义为:串行口每秒钟发送(或接收)的位数。比较混乱,越看越不明白了,大家可以一起来讨论下。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-3-28
在线时间
6 小时
 楼主| 发表于 2017-5-9 13:57:38 | 显示全部楼层
我把网上搜到的结果分享下。
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-3-28
在线时间
6 小时
 楼主| 发表于 2017-5-9 13:58:07 | 显示全部楼层
1:比特率:9600bps  
就是每秒中传输9600bit,也就是相当于每一秒中划分成了9600等份。  
 如此,那么每1bit的时间就是1/9600秒=104.16666666666666666666666666667us。约0.1ms。既然是9600等份,即每1bit紧接着下一个比特,不存在额外的间隔。也不管是啥起始bit,数据bit,奇偶bit,停止bit。
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-3-28
在线时间
6 小时
 楼主| 发表于 2017-5-9 13:58:44 | 显示全部楼层
2:帧格式,帧间隔。  
在电脑里,也就是超级终端等的端口设置。电脑的默认端口设置,也就是默认帧格式是:8个数据bit,1个停止bit,(起始1bit 是必须的)默认无奇偶,无流控。  
 则实际就是10bit为1帧。一秒中可以发送9600/10=960个帧,也就是960字符,因为一帧里只有1个字符,1字符就是帧里面的8个数据bit 
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-3-28
在线时间
6 小时
 楼主| 发表于 2017-5-9 13:59:03 | 显示全部楼层
3:串口通讯  
串口当然可以连续,没有时间间隔地发送帧,默认情形下电脑在9600bps下可以发送960帧。  
 但在实际工作中,在异步通讯下,一般需要一个交互过程,所以,电脑发送一个帧,或者若干帧,还需要等待从设备的应答,并不是一直发送的。有问有答地实现编程者的目标。
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-3-28
在线时间
6 小时
 楼主| 发表于 2017-5-9 13:59:35 | 显示全部楼层
4:波特率时钟      实际上是比特率时钟,每1bit所要花费的时间周期。而波特率(实际是比特率)发生器生成的分频时钟实际是对每1bit进行采样的时钟,它是波特率时钟的16倍。    波特率发生器实质是设计一个分频器,用于产生和RS 232通信同步的时钟。在系统中用一个计数器来完成这个功能,分频系数N决定了波特率的数值。该计数器一般工作在一个频率较高的系统时钟下,当计数到 N/2时将输出置为高电平,再计数到N/2的数值后将输出置为低电平,如此反复即可得到占空比50%的波特率时钟,具体的波特率依赖于所使用的系统时钟频率和N的大小。如系统时钟频率是40 MHz,要求波特率是9 600[MS1] ,则16倍波特率时钟的周期约等于260个系统时钟周期,则计数器取260/2=130时,当计数溢出时输出电平取反就可以得到16倍约定波特率的时钟。      也可以这么理解:40mhz晶振,最小计数脉冲是25ns, 16倍波特率的频率就是16*9600,其时钟周期就是1/(16*9600)=6.5us  也就是以40mhz晶振作为输入的话,计数器需要计数=6500/25=260 个计数。      9600波特率也可理解为一种波特时钟频率,即1秒钟计数9600个,如果是16倍波特率时钟,即直接相乘就可以了。就是1秒计数9600*16=153600 。
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-3-28
在线时间
6 小时
 楼主| 发表于 2017-5-9 13:59:58 | 显示全部楼层
/(9600*16) 除以(1/40000000)也就是以时钟周期除了最小时钟周期得到的就是计数的个数。简化而言就是 40000000/(9600*16)=260,也就是频率直接相除就得到要分频计数器计数的个数。     
 [MS1]  
40000000/(9600*16)=260.4    
串口通信必须要设定波特率,本设计采用的波特率为9 600 bit/s。产生波特率的时钟频率是越高越好,这样才可产生较高且精确的波特率。设计选用50M主频率要产生9600bit/s波特率,每传送一位数据需要5 208.33个时钟周期。取一个最接近的数是5 208,则波特率为9 600.61,其误差约为0.006%,误码率很低可以确保通信正常。  
( liupeng  50000000/5208=9600.61) 
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-3-28
在线时间
6 小时
 楼主| 发表于 2017-5-9 14:00:13 | 显示全部楼层
5: 误差允许范围  
6:分频系数  
 计数器很容易实现分频。可用lpm-counter实现。  
比如分频系数是2,那么,直接用q0作为输出即可。如果分频系数是4,那么q0,q1作为有效比特。  
总而言之,要n整数分频,即计数n后清零重计数。至于50%占空比则另外考虑。奇数分频似不易实现50%占空比。
回复 支持 反对

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3774
金钱
3774
注册时间
2015-4-26
在线时间
766 小时
发表于 2017-5-9 14:00:48 | 显示全部楼层
这俩说的其实是一个东西啊
我有故事,你有酒吗
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-3-28
在线时间
6 小时
 楼主| 发表于 2017-5-9 14:06:48 | 显示全部楼层
来俩不甜的 发表于 2017-5-9 14:00
这俩说的其实是一个东西啊

不是吧,我看着人家分析的好像不是一个东西。
回复 支持 反对

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2017-5-9 16:04:57 | 显示全部楼层
程序,程式是不是一回事??
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-21 11:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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