| 本帖最后由 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;
 
 |