你的位置:首页 > 知识课堂 > 正文

波特率计算?

发布时间:2013-06-04

计算相信大家听到很多,但相信大家对于“波特率计算”还是很陌生的,那究竟什么是波特率计算呢?又应该怎样进行计算呢?以下从几个方面了解一下,希望对大家有帮助!

波特率计算?


我们知道波特率指的是信号被调制以后在单位时间内的变化次数。在串行通信中,收发双方对发送或接收的数据速率要有一定的约定,我们通过软件对MCS—51串行口编程可约定四种工作方式。其中,方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率决定。
串行口的四种工作方式对应着三种波特率。由于输人的移位时钟的来源不同,所以,各种方式的波特率计算公式也不同。

方式0的波特率

方式0时,移位时钟脉冲由56(即第6个状态周期,第12个节拍)给出,即每个机器周期产生一个移位时钟,发送或接收一位数据。所以,波特率为振荡频率的十二分之一,并不受 PCON寄存器中SMOD的影响,即:
方式0的波特率=fosc/12

STM32的CAN波特率计算

STM32里的CAN 支持2.0A,2.0B, 带有FIFO,中断等, 这里主要提一下内部的时钟应用.

bxCAN挂接在APB1总线上,采用总线时钟,所以我们需要知道APB1的总线时钟是多少. 我们先看看下图,看看APB1总线时钟:

波特率计算
APB1时钟取自AHB的分频, 而AHB又取自系统时钟的分频, 系统时钟可选HSI,HSE, PLLCLK, 这个在例程的RC设置里都有的,b

然后再看看有了APB1的时钟后,如何算CAN的总线速率, 先看下图:

波特率计算

CAN波特率的简单计算

假设我们先不考虑BTR0中的SJW位和BTR1中的SAM位。那么,BTR0和BTR1就是2个分频系数寄存器;它们的乘积是一个扩展的分频系数。即:

BTR0×BTR1=F_BASE/Fbps (1)

其中:内部频率基准源F_BASE = Fclk/2,即外部晶振频率Fclk的2分频。注意任何应用中,当利用外部晶振作为基准源的时候,都是先经过2分频整形的。

式中,当晶振为16M时,F_BASE=8000K;当晶振为12M时,F_BASE=6000K,Fbps就是我们所希望得到的CAN总线频率。单位为K。

设式中BTR0=m,BTR1=n,外部晶振16M,则有:m • n =8000/ Fbps

这样,当Fbps取我们希望的值时,就会得到一个m * n的组合值。当n选定,m值也唯一。 n值CAN规范中规定8~25。(也就是BTR1的值)基本原则为:Fbps值越高时,选取n(通过设置BTR1)值越大。其原因不难理解。

我假定一般应用中选取n=10,也就是:同步段+相位缓冲段1+相位缓冲段2 =1+5+4 ,则(2)式简化为m=800/Fbps;m的最大设置值为64,SJA1000最大分频系数m*n=64x25=1600。因此标准算法中通常以16M晶振为例。其实有了公式(1),任何晶振值(6M~24M)都很容易计算。

SAM的确定:低频时,选SAM=1,即采样3次。高频100K以上时,取SAM=0,即采样1次。SJA重同步跳宽选取: 与数字锁相环技术有关。n值选得大时,SJA可以选得大,即一次可以修正多个脉冲份额Tscl。n值小或频率低时,选SJA=1。即BTR0.7和BTR0.6都设为0。

综上所述,本文已为讲解波特率计算、STM32的CAN波特率计算、CAN波特率的简单计算等等,相信大家对波特率计算的认识越来越深入,希望本文能对各位读者有比较大的参考价值。

浏览过本文<波特率计算?>文的人也浏览了

串口波特率

http://baike.cntronics.com/abc/2424

什么是波特率?

http://baike.cntronics.com/abc/2421

波特率是什么?
http://baike.cntronics.com/abc/2391

要采购晶振么,点这里了解一下价格!
特别推荐
技术文章更多>>
技术白皮书下载更多>>
热门搜索
 

关闭

 

关闭