精华内容
下载资源
问答
  • stm32中如何设置波特率?即波特率是如何计算的?在设置波特率的过程中出现问题,求解答,谢谢!
  • STM32CAN波特率简易计算 CAN总线通信的各节点通信时会产生相位差,所以要进行位同步,两个节点保持步调一致。 CAN_SJW:重新同步跳跃宽度(SJW) 。定义了在每位中可以延长或缩短多少个时间单元的上限。其值可以编程...

                                      STM32CAN波特率简易计算

    CAN总线通信的各节点通信时会产生相位差,所以要进行位同步,两个节点保持步调一致。
    CAN_SJW:重新同步跳跃宽度(SJW) 。定义了在每位中可以延长或缩短多少个时间单元的上限。其值可以编程为1到4个时间单元。
    CAN_BS1:时间段1(BS1):定义采样点的位置。其值可以编程为1到16个时间单元,但也可以被自动延长,以补偿因为网络中不同节点的频率差异所造成的相位的正向漂移。
    CAN_BS2:时间段2(BS2):定义发送点的位置。其值可以编程为1到8个时间单元,但也可以被自动缩短以补偿相位的负向漂移。
    CAN_Prescaler:直观理解就是分频率。
    CAN_SJW : CAN_SJW_1tq - CAN_SJW_4tq 一般默认为1  不能比任何一相位缓冲段长

    CAN_BS1 : CAN_BS1_1tq - CAN_BS1_16tq

    CAN_BS2 : CAN_BS2_1tq - CAN_BS2_8tq

    CAN_Prescaler : 1 - 1024

    STM32F1x配置说明:

    baud = 36000000 / (1 + CAN_BS1 + CAN_BS2) / CAN_Prescaler

     

    tss = 1;

    ts1 = CAN_BS1;

    ts2 = CAN_BS2;

    Cia推荐对应波特率采样比率如下:

           0.75     baud > 800k

           0.80     baud > 500k

           0.875    baud <= 500k

    Ex:

    1. 根据需要使用的波特率选择采样率:

    比如我需要baud = 250k,采样率就是0.875;

           (tss + ts1)/(tss + ts1 + ts2) = 0.875

           (1 + ts1) / (1 + ts1 + ts2) = 0.875

           要让ts1 和ts2 都为整数且上面等式成立,则有:   CAN_BS1 = 6,CAN_BS2= 1;

                                                                                       CAN_BS1 = 13,CAN_BS2= 2

                                                                                        ……

        2.根据baud = 36000000 / (1 + CAN_BS1 + CAN_BS2) / CAN_Prescaler = 250K

    Can分频: CAN_Prescaler = 36000000/(1 + 13 + 2)/250K = 9;

    所以需要配置CanBand = 250K参数为:

            CAN_BS1 = CAN_BS1_13tq(13)

            CAN_BS2 = CAN_BS2_2tq(2)

            CAN_Prescaler = 9

    程序中Can波特率给对应参数:

                 

    展开全文
  • STM32中CAN波特率计算

    千次阅读 2018-09-14 11:00:49
    车辆使用的250K 的波特率,使用STM32制作的控制板中的CAN波特率计算 波特率=APB1Clock/(1+CAN_BS1+CAN_BS2)/CAN_Prescaler (PS:CAN_SJW表示重新同步跳跃宽度,不参与波特率计算,其值可以编程为1到4个时间...

    车辆使用的250K 的波特率,使用STM32制作的控制板中的CAN波特率的计算

    波特率=APB1Clock/(1+CAN_BS1+CAN_BS2)/CAN_Prescaler

    (PS:CAN_SJW表示重新同步跳跃宽度,不参与波特率的计算,其值可以编程为1到4个时间单元,表示该总线对波特率范围的容差度。公式中1表示同步段固定为一个单位时间。)

    APB1Clock=36Mhz,CAN_BS1=3,CAN_BS2=5,CAN_Prescaler=16

         36000k/9/16=250k/s

    另外,尽可能地把采样点设置为CiA推荐的值:

    CiA波特率
    75%>800K
    80%>500K
    87.5%<=500K

    CiA计算方式:(1+CAN_BS1)/(1+CAN_BS1+CAN_BS2)

    采样点设置的影响:采样点设置的符合表格中的范围,CAN通信会更稳定。

    CAN位时间组成 取决于配置的“原子”时间单位称为时间量子(tq) - 这些时间量子的倍数。时间量程长度来自比特率预分频器和使用的振荡器频率。
    CAN位时间逻辑上分为四个段。同步段总是长度为1 tq。后面的传播段和相位段1对于用户是不可区分的。它被配置为一个值。第四部分是相位段2.在两个相位段之间,定位采样点。如果位定时设置将采样点移动到位的结尾,则传播段被放大,以便可以实现更长的网络。如果采样点在另一个方向配置,则重新同步功能会增加。
    所有连接的CAN节点的采样点应该相同。然而,在实践中,如果采样点区别不大就足够了。汽车行业为SAE J2284系列中的位定时设置指定了一些建议。对于CANopen网络,应使用CiA 301中给出的建议。采样点应为位时间的87.5%。对于大多数指定的比特率,允许85%至90%的范围。当然,公差范围越大,网络的最大可能长度越短。

    展开全文
  • 什么是波特率 ...下面以STM32单片机为例,讲解一下串口波特率计算方法。 STM32波特率相关的寄存器 STM32单片机设置波特率的寄存器只有一个:USART_BRR寄存器,如下图所示。 该寄存器的有效位数为16位,

    什么是波特率

    不管是什么单片机,在使用串口通信的时候,有一个非常重要的参数:波特率。什么是波特率:波特率就是每秒传送的字节数。双方在传输数据的过程中,波特率一致,这是通讯成功的基本保障。下面以STM32单片机为例,讲解一下串口波特率的计算方法。

    STM32波特率相关的寄存器

    STM32单片机设置波特率的寄存器只有一个:USART_BRR寄存器,如下图所示。
    这里写图片描述

    该寄存器的有效位数为16位,前4位用于存放小数部分,后12位用于存放整数部分。将波特率算出来后,数值填入这个波特率就可以了。下面介绍如何计算。

    波特率计算方法

    STM32的数据手册给出了计算方法,有一个公式,如下图所示:

    这里写图片描述

    在这个公式上,共有三个变量,其中两个我们是知道的,Fck和Tx/Rx波特率 这两个是已知的,USARTDIV是未知的。通过该公式的描述可以看出如果使用USART1的话,那Fck就是PCLK2=72MHz,否则就是PCLK1=36MHz,Tx/Rx波特率这个参数是已知的。只需要计算出USARTDIV的值赋值给USART_BRR寄存器就可以了。以115200为例,将公式变形后得到:USARTDIV = 72×1000000/(16×115200) = 39.0625。即将39.0625写入USART_BRR即可。

    前文说过,USART_BRR的前4位存放小数部分,后12位存放整数部分。

    那小数部分DIV_Fraction = 0.0625×16 = 1 = 0x01;
    那整数部分DIV_Mantissa = 39 = 0x27;
    那USART_BRR = 0X271;

    数据手册给我们提供了一张数据表:
    这里写图片描述

    在这张数据表上,已经算出了常用的波特率值,我们可以拿来直接用。但是如果我们想把波特率的计算做成一个传参函数的方式,
    如:USART_INIT(uint_t 16 Baud),在调用时只需要写USART_INIT(9600),USART_INIT(115200),那程序该怎么写呢?

    程序的实现

    下面介绍的是寄存器版的程序。
    这里写图片描述

    程序第二步46行:获得USART_DIV的整数部分;
    程序第三步47行:获得USART_DIV的小数部分;
    程序第四步48行:将整数部分左移4位,即存入BRR寄存器的后12位;
    程序第五步49行:将整数和小数部分合在一起,即前4位和后12位重新组合;
    程序第六步50行:将计算出来的数值赋给BRR寄存器。
    这样一个将波特率作为形参的函数就完成了。从以上来看的话,波特率的计算好像也不是很难啊。

    展开全文
  • 【原创】STM32波特率计算详解

    千次阅读 2015-02-02 22:51:00
    波特率计算 STM32下的波特率和串口外设时钟... STM32串口波特率通过USART_BRR进行设置,STM32波特率寄存器支持分数设置,以提高精确度。USART_BRR的前4位用于表示小数,后12位用于表示整数。但是它还不是我们...
    波特率的计算

        STM32下的波特率和串口外设时钟息息相关,USART 1的时钟来源于APB2,USART 2-5的时钟来源于APB1。在STM32中,有个波特率寄存器USART_BRR,如下:


         STM32串口波特率通过USART_BRR进行设置, STM32的波特率寄存器支持分数设置,以提高精确度。USART_BRR的前4位用于表示小数,后12位用于表示整数。但是它还不是我们想要设置的波特率,想要设置我们串口的波特率大小还需要进行计算。其实有关波特率的计算是下面这一条表达式:

        从上面的表达式,我们引入了一个新量USARTDIV,它表示对串口的时钟源fck进行分频。假设我们已知道了波特率和fck时钟频率的大小,那么通过上式便可以计算出USARTDIV的具体大小,然后再通过USART的值大小对波特率寄存器进行设置。
        USARTDIV通过上面的表达式得出,是一个带有小数的浮点数(如27.75)。将小数部分和整数部分分开,分别得到一个整数值n(如27)和一个小数值m(如0.75)。有了这两个值我们便可以填写USART_BRR寄存器进而设置我们串口波特率大小了。
        将整数部分m(27 = 0x1B)直接写入USART_BRR的后12位部分;将小数部分n乘以16后得到的整数值(如0.75 x 16 = 12 = 0xC)写入USART_BRR前4位部分,最后USART_BRR的值为0x1BC。
    注意:如果小数部分乘以16之后仍带有小数,则要四舍五入去除小数部分得到一个新的整数,再将其写入USART_BRR的前四位。
     
    为什么在计算波特率的公式中要乘以16?
        ​我们知道串口通信是通过TXD和RXD这两条线进行通信的,当接收器的RXD连接着发送器的TXD,接收器的TXD连接着发送器的RXD,接收器和发送器可以通过RXD和TXD互传数据。当接收器检测到RXD这条线的电平被拉为低电平,立即开始接收发送器发送过来的数据,刚刚那个低电平只是一个告知接收器可以接收数据的起始位而已。
        在数据的传输中,信号可能受到一些干扰而产生一些抖动,如下图。如果接收端只对这些信号数据采样一次,那么它有可能采样到的是抖动的不准的数据,进而使数据传输不准确,所以接收端在采样数据线上的数据,通常都要采样多次,然后通过比较获得准确的数据。
      
        
         前面已经说过, USARTDIV, 它表示对串口的时钟源fck进行分频 ,而这16表示的正是1bit数据的采样次数。为什么呢?
         ,将这个表达式的分子分母倒过来,可以得到下面这条表达式
        
         每一位的传输时间只有1/TX_baud,这个总时间除以16,所以每采样一次的时间正好是T1,即新分频后的周期。而初始的串口时钟信号来自于 APBx,APBx时钟信号需要经过分频才会等于T1,所以才需要分频USARTDIV。

    转载于:https://www.cnblogs.com/cposture/p/4268910.html

    展开全文
  • stm32波特率计算

    2018-02-25 14:55:44
    转自:http://m.elecfans.com/article/611035.html?fromtype=app1. 什么是波特率不管是什么单片机,在使用串口通信的时候,...下面以STM32单片机为例,讲解一下串口波特率计算方法。2. STM32波特率相关的寄存器ST...
  • STM32中如何计算波特率

    千次阅读 2015-05-07 23:24:09
    波特率计算  STM32下的波特率和串口外设时钟息息相关... STM32串口波特率通过USART_BRR进行设置,STM32波特率寄存器支持分数设置,以提高精确度。USART_BRR的前4位用于表示小数,后12位用于表示整数。但是它还不
  • STM32的CAN波特率计算

    千次阅读 2017-04-14 16:24:03
    STM32的CAN波特率计算
  • 最近看一下CAN通信,翻出来之前做过的STM32 CAN通信的项目代码,有些概念比较模糊了,如波特率是怎么计算的。 最近接触rt-thread比较多,想把之前的CAN通信的代码,移植到RTOS上。 CAN波特率 如果主机与从机,...
  • MCU是野火的STM32H743挑战者,例程基于野火的《CAN双机通信》; 位时序分解 STM32 的 CAN 外设位时序中只包含 3 段,分别是同步段 SYNC_SEG、位段 BS1 及位段 BS2,采样点位于 BS1 及 BS2 段的交界处。其中 SYNC_...
  • 波特率寄存器,生成波特率 fck 时钟源 over8 八倍采样=1 16倍采样=0 USARTDIV 串口分频值(未知需要求出来) USARTDIV = fCK / 波特率 X 8 X (2-OVER8) 举例: Fck = 84MHz OVER8=0 (16倍过采样) ...
  • STM32波特率设置

    万次阅读 2015-08-02 21:44:23
    USART1的波特率公式:Baud_Rate = Fck/(16*USARTDIV) USARTDIV = Fck/(16*Baud_Rate) 然后按下述方法计算,例如总线时钟频率为72MHz,配置波特率为9600过程如下: 求得:USARTDIV = 468.75, 因为STM32的波特比率...
  • STM32 CAN 波特率计算

    千次阅读 2015-03-11 22:18:59
    STM32里的CAN 支持2.0A,2.0B, 带有FIFO,中断等, 这里主要提一下内部的时钟应用. bxCAN挂接在APB1总线上,采用总线时钟,所以我们需要知道APB1的总线时钟是多少. 我们先看看下图,看看APB1总线时钟: APB1时钟取...
  • STM32的CAN波特率设置方法详解

    千次阅读 2020-07-06 12:30:20
    一般来说,同一个波特率可以对应多组参数,但是要...波特率计算公式: 波特率 = 频率/(CAN_BS1+CAN_BS2+1)/CAN_Prescaler 采样点计算方式: smp = (1+CAN_BS1)/(1+CAN_BS1+CAN_BS2) 以上内容如有错误或描述不合理的地方
  • 用qt做得一个计算波特率的小程序,在实际的应用中我们设置波特率的时候是通过以下参数来定的: CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; CAN_InitStructure.CAN_BS1=CAN_BS1_9tq; CAN_InitStructure.CAN_BS2=CAN_...
  • 一、概要 使用UART串口时往往比较喜欢配置波特率为标准的9600、115200等,而实际应用中需要更高的波特率。如果在配置UART波特率时任意输入一个很高的波特率,如200000...二、STM32F4波特率计算方法 以stm32f4系列为例
  • stm32支持的波特率的问题

    万次阅读 2016-08-17 19:10:59
    原来学习stm32,关于串口波特率这个问题没有怎么关注,一般也就习惯用9600或者115200,今天被问到:stm32支持的最大波特率为多少?我自己也语塞了... 为此我好好看了下相关资料。 首先查看了stm32f10x参考手册.pdf...
  • STM32 USART 波特率计算

    千次阅读 2015-07-12 23:32:00
    The baud rate for the receiver and transmitter (Rx and Tx) are both set to the same value as programmed in the Mantissa and Fraction values of USARTDIV. ...STM32库函数USART波特率计算的奇葩问题  
  • STM32F429的USART波特率计算溢出Bug

    千次阅读 2015-01-04 11:19:37
    硬件平台是STM32F429,...使用 USART1 和 USART2 进行串口输出,但是用示波器一看,波特率明显不对。 我的代码如下: RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB
  • 串口波特率计算详解

    万次阅读 2017-06-15 19:43:12
    【原创】STM32波特率计算详解 波特率的计算  STM32下的波特率和串口外设时钟息息相关,USART 1的时钟来源于APB2,USART 2-5的时钟来源于APB1。在STM32中,有个波特率寄存器USART_BRR,如下:  STM32串口波特...
  • STM32 CAN 波特率、采样点设置

    万次阅读 2017-05-09 16:34:02
    STM32 CAN 波特率、采样点设置
  • 串口波特率计算方式

    万次阅读 多人点赞 2018-10-05 23:19:55
    STM32波特率计算方式解释: 波特率的计算  STM32下的波特率和串口外设时钟息息相关,USART 1的时钟来源于APB2,USART 2-5的时钟来源于APB1。在STM32中,有个波特率寄存器USART_BRR,如下:  STM32串口波特...
  • 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右...列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能...
  • 12M晶振下,STM32串口波特率设置问题

    千次阅读 2017-11-28 16:35:49
    使用外接12MHz的晶振,会造成很多的问题,如USART的波特率不正确,Systick走时不准等问题,在无论是在实际调试还是在软件模拟中都会发现这个情况,其实,这不能怪ST官方,我们必须肯定ST官方为方便用户开发所做的...
  • The baud rate for the receiver and transmitter (Rx and Tx) are both set to the same value ...STM32库函数USART波特率计算的奇葩问题 转载于:https://www.cnblogs.com/huangyangquan/p/9300880.html

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 921
精华内容 368
关键字:

stm32波特率计算公式