STM32CAN波特率简易计算

总线 同时被 2 个专栏收录
1 篇文章 0 订阅
7 篇文章 0 订阅

                                  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波特率给对应参数:

             

  • 1
    点赞
  • 0
    评论
  • 8
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页

打赏作者

JT灬新一

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值