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;

<think>好的,用户想了解如何设置TC397芯片上的CAN总线波特率。首先,我需要回忆一下TC397芯片的相关资料。根据引用[1],TC397有12路ASCLIN模块,支持UART、LIN和SPI。但CAN总线通常需要特定的控制器,可能ASCLIN模块并不直接支持CAN。不过,TC397可能集成的是MultiCAN模块?这点可能需要确认。 接下来,用户的问题是关于CAN总线波特率的配置。通常,CAN波特率设置涉及几个参数:时钟源、分频系数、位时间中的时间段(同步段、传播段、相位缓冲段1和2)。需要确定TC397的CAN控制器是否使用这些标准参数。 查阅引用[1]中的信息,TC397的ASCLIN模块是3合1的,可能CAN部分属于其他模块,比如MultiCAN。假设TC397的CAN控制器是MultiCAN,那么需要参考相关寄存器配置。例如,可能涉及设置位定时寄存器,比如NBTP(Nominal Bit Timing Parameters)寄存器,配置波特率预分频器、时间段等。 另外,引用[2]提到FDCAN的寄存器设置,虽然TC397可能不是FDCAN,但配置思路类似。比如,设置测试值ETV可能用于检测端序,但波特率配置更多关注DBTP(Data Bit Timing Parameters)或NBTP。不过需要具体针对TC397的文档。 用户提供的引用[3]提到T113i主板的双路CAN总线,但可能和TC397不同。不过,可能涉及类似的配置步骤,比如时钟分频、位时间计算。 总结步骤可能包括: 1. 确定CAN控制器的时钟源频率。 2. 计算所需波特率对应的分频系数。 3. 配置位时间各段的比例,确保总和符合采样点位置。 4. 编写寄存器设置代码,包括预分频器、时间段参数等。 需要注意TC397的具体模块名称和寄存器结构,可能参考用户手册中的MultiCAN章节。例如,设置NBTP寄存器的NBRP(分频系数)、NTSEG1、NTSEG2等字段。同时,可能需要配置模式寄存器进入初始化模式才能修改这些参数。 最后,生成示例代码时,需要根据TC397的SDK或寄存器定义,使用正确的寄存器地址和位域。比如,设置CAN节点位定时寄存器的值,然后退出初始化模式,使配置生效。</think>### TC397芯片CAN总线波特率配置步骤 #### 1. 时钟源确认 TC397的CAN控制器采用$f_{CANCLK}$作为基础时钟源,通常来源于系统时钟分频。例如:系统时钟为100MHz时,通过分频系数得到$f_{CANCLK}= \frac{100\text{MHz}}{N}$[^1]。 #### 2. 位时间参数计算 CAN总线波特率计算公式为: $$Baudrate = \frac{f_{CANCLK}}{(SyncSeg + PropSeg + PhaseSeg1 + PhaseSeg2) \times Prescaler}$$ 其中: - $SyncSeg$固定为1个时间单位 - $PropSeg$用于信号传播延迟补偿 - $PhaseSeg1/2$用于采样点调整 #### 3. 寄存器配置 TC397的CAN波特率通过`CAN_NBTP`寄存器配置,具体位域如下: ```c typedef struct { uint32_t NBRP : 8; // 分频系数 (Prescaler-1) uint32_t NTSEG1 : 8; // (PropSeg + PhaseSeg1 -1) uint32_t NTSEG2 : 7; // (PhaseSeg2 -1) uint32_t NSJW : 7; // 同步跳转宽度 } CAN_NBTP_Type; ``` #### 4. 配置示例 以配置500kbps波特率,系统时钟100MHz为例: 1. 选择分频系数$Prescaler=4$ → $f_{CANCLK}=25MHz$ 2. 总时间单位$TQ = 1/25MHz = 40ns$ 3. 设置位时间参数: - $SyncSeg = 1TQ$ - $PropSeg + PhaseSeg1 = 7TQ$ → `NTSEG1=6` - $PhaseSeg2 = 2TQ$ → `NTSEG2=1` - 总位时间$=1+7+2=10TQ=400ns$ → 波特率$2.5MHz/(10)=250kbps$(需重新计算参数) 实际配置代码示例: ```c // 进入初始化模式 CAN_NCR.B.INIT = 1; // 设置波特率参数 CAN_NBTP.B.NBRP = 3; // Prescaler=4 (3+1) CAN_NBTP.B.NTSEG1 = 6; // 7时间单位 CAN_NBTP.B.NTSEG2 = 1; // 2时间单位 CAN_NBTP.B.NSJW = 1; // 同步跳转宽度 // 退出初始化模式 CAN_NCR.B.INIT = 0; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值