心向朝阳 发表于 2022-10-9 17:45

N32如何修改CAN波特率以及如何调整采样点

N32G45X支持2路CAN总线接口,兼容规范2.0A和2.0B,位速率高达1Mbit/s。那么软件中应该怎么设置,才能达到我们想要的波特率速率呢?以及理论上波特率速率越高,相应的采样点位置要越往后移(即采样率要越大),那软件上应该怎么配置,才能调整采样率呢?下面小编来具体介绍一下

linjinming2000 发表于 2022-10-9 17:51

最佳采样点是87.5%

chenqianqian 发表于 2022-10-9 18:59

1M是理论通信速率,实际通信速率和通信距离和拓扑结构都有关系。

心向朝阳 发表于 2022-10-9 19:42

1.首先我们要查看用户手册:知晓CAN外设时钟是搭载在APB1时钟总线上的,所以按照N32G45X的SDK的原始配置,APB1总线的时钟频率为36M,此时引入CAN外设结构体成员变量:BaudRatePrescaler;该成员的作用是配置CAN外设的时钟分频,可设置为1-1024分频,比如我们设置4,则CAN外设时钟为:APB1时钟/CAN外设时钟分频系数 = 36M/4 =9M

心向朝阳 发表于 2022-10-9 19:53

2.通过设置BaudRatePrescaler这个个CAN外设结构体成员变量为4,我们得到了CAN外设时钟为9M,此时再引入两个CAN外设结构体成员变量:TBS1和TBS2,一个正常的位时间=1(固定)+TBS1+TBS2 ;其中最前面的1为固定数值,TBS1和TBS2分别为(TBS1【3:0】寄存器表示数值+1;TBS2【2:0】寄存器表示数值+1),注意:在N32G45X的can驱动库中,TBS1和TBS2可选参数已经封装了一层宏定义,不需要用户自己再+1,TBS1和TBS2的宏定义参数是多少tq就用多少tq计算

心向朝阳 发表于 2022-10-9 19:58

比如这组参数:
    CAN_InitStructure.TBS1            = CAN_TBS1_14tq;
    CAN_InitStructure.TBS2            = CAN_TBS2_3tq;
    CAN_InitStructure.BaudRatePrescaler = 4;
一个位时间= 1(固定数值)+14tq+3tq = 18tq ;而1tq=1/CAN外设时钟=1/9M;所以一个位时间=18/9M ,波特率即为位时间的倒数:9M/18=500k

心向朝阳 发表于 2022-10-9 20:02

而采样点固定在TSB1和TBS2的交界处,所以这组参数的采样率为: /=15tq/18tq=83.3%

心向朝阳 发表于 2022-10-9 20:04

调整TBS1和TBS2的数值,可以改变采样点位置,从而改变采样率,但同时一个位的时间也会随之改变,同时影响到波特率的大小
页: [1]
查看完整版本: N32如何修改CAN波特率以及如何调整采样点