本文主要是介绍CAN 波特率设置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
CAN时钟源的选择有两种,一种为总线时钟,一种为外接时钟
波特率计算公式:F(Baud) = F/(BRP* (1+TSEG2+TSEG1))
波特率设置相关寄存器
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
SJW1 | SJW0 | BRP5 | BRP4 | BRP3 | BRP2 | BRP1 | BRP0 |
Table1 CANBTR0
SJW1 | SJW0 | Synchronization Jump Width |
0 | 0 | 1 Tq clock cycle |
0 | 1 | 2 Tq clock cycle |
1 | 0 | 3 Tq clock cycle |
1 | 1 | 4 Tq clock cycle |
Table2 SJW
BRP5 | BRP4 | BRP3 | BRP2 | BRP1 | BRP0 | Prescaler value |
0 | 0 | 0 | 0 | 0 | 0 | 1 |
0 | 0 | 0 | 0 | 0 | 1 | 2 |
0 | 0 | 0 | 0 | 1 | 1 | 3 |
0 | 0 | 0 | 1 | 1 | 1 | 4 |
.. | .. | .. | .. | .. | .. | .. |
1 | 1 | 1 | 1 | 1 | 1 | 64 |
Table3 Baud Rate Prescaler
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
SAMP | TSEG22 | TSEG21 | TSEG20 | TSEG13 | TSEG12 | TSEG11 | TSEG10 |
Table4 CANBTR1
TSEG22 | TSEG21 | TSEG20 | Time Segment 2 |
0 | 0 | 0 | 1 |
0 | 0 | 1 | 2 |
.. | .. | .. | ... |
1 | 1 | 0 | 7 |
1 | 1 | 1 | 8 |
Table5 TSEG2
TSEG13 | TSEG12 | TSEG11 | TSEG10 | Prescaler value |
0 | 0 | 0 | 0 | 1 |
0 | 0 | 0 | 1 | 2 |
0 | 0 | 1 | 0 | 3 |
0 | 0 | 1 | 1 | 4 |
.. | .. | .. | .. | .. |
1 | 1 | 1 | 0 | 15 |
1 | 1 | 1 | 1 | 16 |
例程
1. 总线时钟40MHZ,设置CAN波特率为500KHZ
40MHZ/500KHZ=80
80 = BRP *(1+TSEG2+TSEG1) =10 * 8;
所以设置BRP =8,TSEG2=4,TSEG1=5. SJW=0x01对应寄存器值
CAN0BTR0=0x47;
CAN0BTR1=0x43;
2. 总线时钟40MHZ,设置CAN波特率为250KHZ
40MHZ/250KHZ=16
80 = BRP *(1+TSEG2+TSEG1) =16 * 8;
所以设置BRP =8,TSEG2=4,TSEG1=5,SJW=0x01对应寄存器值
CAN0BTR0=0x4F;
CAN0BTR1=0x43;
这篇关于CAN 波特率设置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!