CAN通讯波特率配置

    /* Bps = 250Kbps */

//    CAN_Mode_Init(CAN_SJW_1tq, CAN_BS2_5tq, CAN_BS1_6tq, 12, CAN_Mode_Normal);

    /* Bps = 5Kbps */

    CAN_Mode_Init(CAN_SJW_1tq, CAN_BS2_8tq, CAN_BS1_16tq, 300, CAN_Mode_Normal);

老师们好,250kbps是例程的,测试是可以收到数据的,

但我现在需要配置成5kbps,但是测试是收不到数据,can的分频系数应该是1-1024,配置成300应该是可以的,但实测确实收不到,调整成50可以。请老师指点是哪里出了问题,应该怎么来配置这个参数。

您好,配置5kbps代码参数如下:微信图片_20221027142831.jpg





can分析仪发送数据测试如下:

1666852237114788.jpg

1666852237192920.jpg

1666852237703561.jpg



你好,系统时钟不是72MHz吗,一个tq有12个周期那就是(1/6)us,BS1+BS2+SJW = 12,也就是一个位的长度是2us,算回来不应该是500Kbps吗,这个我一直没有搞懂,芯片是CH32V203,可以解惑一下吗



您好,CAN外设一般是挂在APB1总线上的,APB1总线的时钟一般有系统主频2分频得到(具体看程序配置,也可配置1分频),当系统主频配置为144MHz时,若2分频,则APB1时钟就是72MHz,因此CAN外设的时钟不是固定的,要看程序的配置。关于CAN波特率的计算,可参考下帖,有讲CAN波特率的计算方式。
https://www.cnblogs.com/wchmcu/p/17546797.html


我们来算一下,按照例程,tpclk1 = 36m

can_hw_init(CAN_SJW_1tq/* 一般固定为1tq */, CAN_BS2_5tq, CAN_BS1_6tq, 12, CAN_Mode_Normal );

那么bs1=6,bs2=5,brp=12-1=11

bps = 36m/((6+5+3)*11)=0.233 mbps,比250差的比较多

上面计算对吗?


您好,不好意思,上述计算公式有问题,应该是乘以BRP[9:0]+1,可参考下帖对CAN波特率计算的介绍:

https://www.cnblogs.com/wchmcu/p/17546797.html

 




只有登录才能回复,可以选择微信账号登录