本帖最后由 JasonLee27 于 2021-4-23 15:54 编辑
这里给大家介绍一下CAN的波特率和采样点的配置与计算
如下表:
我们的CAN模块支持AHB即系统时钟和XOSC外部晶振时钟。
对所有CAN控制器来说,SJW,SEG1 SEG2的配置方式都是一样的。对应我们驱动接口的配置如下。
/*
设置波特率为500K,采样点为81.25%.
tSeg1 = (S_SEG_1 + 2); tSeg2 = (S_SEG_2 + 1).
BandRate = (16M / (S_PRESC + 1) / ((S_SEG_1 + 2) + (S_SEG_2 + 1)))
SamplePoint = (tSeg1 / (tSeg1 + tSeg2)).
在已经知道波特率与采样点的情况下,经过计算后:tSeg1 = 13,tSeg2 = 3.
*/
canBandrateConfig.PRESC = 0;//分频后时钟为8M.
canBandrateConfig.SEG_1 = 11;
canBandrateConfig.SEG_2 = 2;
canBandrateConfig.SJW = 2;//满足S_SJW <= tSeg2即可.
///data bit rate = 2M
///samplePoint 62.5%
canDataBitrateConfig.PRESC = 0;//分频后时钟为16M.
canDataBitrateConfig.SEG_1 = 3;
canDataBitrateConfig.SEG_2 = 2;
canDataBitrateConfig.SJW = 2;//满足S_SJW <= tSeg2即可.
canConfig.clockSrc = CAN_CLKSRC_AHB; ///<选择时钟源 CAN_CLKSRC_EXTERNAL_OSC:外部晶振 CAN_CLKSRC_AHB:系统时钟,默认48M
如果使用CANFD,需要设置二次采样点,对应驱动中如下配置:
canConfig.tdcEnable = ENABLE;
canConfig.sspOffset = 13;
|