CAN 波特率设置

来源:互联网 发布:js验证码不区分大小写 编辑:程序博客网 时间:2024/05/18 00:46

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;