if(BaudRate==1){ // 20Kbps hcan1.Init.Prescaler = 175; hcan1.Init.TimeSeg1 = CAN_BS1_8TQ;//时间段1 hcan1.Init.TimeSeg2 = CAN_BS2_3TQ;//时间段2 } 这个不是20K吗
时间: 2024-03-19 21:42:19 浏览: 89
是的,这段代码中的BaudRate等于1时,CAN总线的波特率为20Kbps。在这段代码中,使用了CAN总线的初始化函数hcan1.Init,通过设置Prescaler、TimeSeg1和TimeSeg2等参数来实现波特率的设置。其中,Prescaler参数表示分频系数,TimeSeg1和TimeSeg2参数表示时间段1和时间段2的长度,三个参数共同决定了波特率的大小。
相关问题
//CAN总线的波特率计算公式:波特率 = 1 / (时间段1 + 时间段2 + 1) / 时钟分频器 // =(42MHz/(6+3+1))/21=250000=250Kps if(BaudRate==5){ // 125Kbps hcan1.Init.Prescaler = 42; hcan1.Init.TimeSeg1 = CAN_BS1_6TQ;//时间段1 hcan1.Init.TimeSeg2 = CAN_BS2_1TQ;//时间段2 } //CAN总线的波特率计算公式:波特率 = 1 / (时间段1 + 时间段2 + 1) / 时钟分频器 // =(42MHz/(6+1+1))/21=250000=250Kps if(BaudRate==6){// 250Kbps hcan1.Init.Prescaler = 21; hcan1.Init.TimeSeg1 = CAN_BS1_6TQ;//时间段1 hcan1.Init.TimeSeg2 = CAN_BS2_1TQ;//时间段2 }根据这些规律写出其它常用CAN波特率配置
根据上述公式,以下是常用的CAN波特率配置:
1. 500Kbps: hcan1.Init.Prescaler = 10, hcan1.Init.TimeSeg1 = CAN_BS1_6TQ, hcan1.Init.TimeSeg2 = CAN_BS2_1TQ
2. 250Kbps: hcan1.Init.Prescaler = 21, hcan1.Init.TimeSeg1 = CAN_BS1_6TQ, hcan1.Init.TimeSeg2 = CAN_BS2_1TQ
3. 125Kbps: hcan1.Init.Prescaler = 42, hcan1.Init.TimeSeg1 = CAN_BS1_6TQ, hcan1.Init.TimeSeg2 = CAN_BS2_1TQ
4. 100Kbps: hcan1.Init.Prescaler = 42, hcan1.Init.TimeSeg1 = CAN_BS1_8TQ, hcan1.Init.TimeSeg2 = CAN_BS2_3TQ
5. 50Kbps: hcan1.Init.Prescaler = 84, hcan1.Init.TimeSeg1 = CAN_BS1_8TQ, hcan1.Init.TimeSeg2 = CAN_BS2_3TQ
6. 20Kbps: hcan1.Init.Prescaler = 210, hcan1.Init.TimeSeg1 = CAN_BS1_8TQ, hcan1.Init.TimeSeg2 = CAN_BS2_3TQ
注意:以上配置仅供参考,具体配置还需要根据实际情况进行调整。
if(BaudRate==6){ hcan1.Init.Prescaler = 21; hcan1.Init.TimeSeg1 = CAN_BS1_6TQ;//时间段1 hcan1.Init.TimeSeg2 = CAN_BS2_1TQ;//时间段2 }对应是250K,算下125K怎么配置
如果要将上述代码中的波特率从 250Kbps 更改为 125Kbps,需要将 CAN 的预分频器(Prescaler)配置为 42/2 = 21,因为 CAN 的主时钟频率是 APB1 时钟频率的一半,而 APB1 的时钟频率是 42MHz。
在时间段的配置方面,需要根据 CAN 的定时器时钟周期(Time Quantums,TQ)进行计算。TQ 的总数等于时间段 1、时间段 2 和同步跳转宽度的总和。对于 125Kbps 的波特率,每个比特需要 8 个 TQ,因此总共需要 10 个 TQ(1 个同步跳转宽度,6 个时间段 1 和 3 个时间段 2)。
因此,对应的代码如下:
```
if(BaudRate==5){ // 125Kbps
hcan1.Init.Prescaler = 21;
hcan1.Init.TimeSeg1 = CAN_BS1_6TQ;
hcan1.Init.TimeSeg2 = CAN_BS2_3TQ;
}
```
需要注意的是,CAN 的波特率配置需要根据实际的硬件电路和通信协议进行调整,上述代码仅供参考。
阅读全文