can部分 6 stm32的can波特率配置
can的波特率计算:
stm32的配置参数
其中
CAN_SJW_1tq是同步段,习惯上默认配置成1. 可以调节的节拍数. (范围1-4)
CAN_BS2_6tq是相位缓冲段2. (范围1-8)
CAN_BS1_7tq是传播段+相位缓冲段1. (范围1-16)
3,这里是预分频值. (范围1-1024)
函数原型:
先按照波特率定义中的各个参数,进行计算:
计算出各个变量.
然后再选出最优的变量组合.
然后再用选好的变量,推算出stm32的寄存器赋值.

第一个参数:
Q,一个位切分成的份数.(范围 3-25 越大越好)
BRP是用于将APB的时钟分频到CAN时钟.
BRP=APB/(Q*Baudrate) ,
根据上面公式
APB,已知=42M
Baudrate,已知=1000000Kbps=1M
那么,Q和BRP就可以计算出来.
(这里会有很多组满足条件的,然后Q范围限制在3-25,且越大越好,所以选出最优的一组)
(最终定下 Q=14 )
(最终定下 BRP=3)
举例: 42M/(14*3)=1000Kbps=1M的波特率
Q的参数就是越大越好.
Q就是一个bit,一个位所被分成的节拍数.
Q是总的节拍数,要分给各个段.
Q=Tss+Tps+Tpbs1+Tpbs2=14
那么1M波特率就是1us传输1位数据.
Q等于14,就是把1us分成了14份,每份约0.07142us (次值就是时间节拍Tq).
然后,下面计算Tss,Tps,Tpbs1,Tpbs2各占多少份
第二个参数:
Tss
按照习惯,通常占一拍.
即Tss=1
第三个参数:
Tps
其物理意义是传播段时间长度.
信号在总线上来回传输所消耗的时间.
设一次单向传输的延时为包括:
1.发送节点从生产信号到把信号发送到总线上,T1.
2.信号在总线上传输的时间T2.
3.接收节点从总线获取信号的时间T3.
因为是来回传输,所以要乘以2.
Tps>=2*(T1+T2+T3)
举例:
Tps是由设备性能和总线长度决定的.通常总线延时可按5.5ns/米计.单个节点收
发延迟可按75ns计.假如有线长12m,则Tps=2*(12*5.5+75)=141ns.根据上一步的Q值
(想要的波特率和时钟分频得到),计算出节拍时间Tq 这个已知约0.07142us=71.42ns 在上面计算过.
Tps=141/71.42=1.974约为2
即Tps=2
第四个参数,第五个参数
Tpbs1,Tpbs2
根据Q值-1-Tps(Tss一般默认为1),就得到Tpbs1和Tpbs2两数之和,
Q-Tss-Tps=Tpbs1+Tpbs2
由于上面计算
Q已知=14
Tss已知=1
Tps已知=2
那么Tpbs1和Tpbs2就能计算出来.
Tpbs1+Tpbs2=11
然后除以2,就得到了分别的值.如果是奇数则Tpbs2比Tpbs1多1个.
Tpbs2=6
Tpbs1=5
至此,上面的所有参数都得到了.
然后,开始根据上面的参数,计算stm32的参数.
根据表格:

1,stm32单片机中的第一个参数:即:CAN_SJW_1tq
CAN_SJW_1tq 就是1
2,stm32单片机中的第二个参数:即:CAN_BS2_6tq=6
Tpbs2是stm32单片机中的Ts2;
stm32_Ts2=Tpbs2=6
3,stm32单片机中的第三个参数:即:CAN_BS1_7tq=7
Tps和Tpbs1相加构成stm32单片机中的Ts1;
stm32_Ts1=Tps+Tpbs1=2+5=7
4,stm32单片机中的第四个参数:3
BRP=3
总结:
其实,CAN的波特率实际是多个参数决定的.
这样更加确定了采样点的位置.

还可以通过一些软件进行配置波特率
