nxp-kw36-Flexcan(波特率设置)

 


where the options are Peripheral clock=20MHz or Oscillator clock (16MHz if using 32MHz xtal or 13MHz if using 26MHz xtal). The recomiendation is to use the Oscillator clock due to peripheral clock can have jitter that affect communication. 

 

计算公式

TQ calculation for nominal phase:(这里我的程序选择外部32Mhz,为什么下面是16Mhz请看上面那段英文)

TQ = (PRESDIV + 1) / CANCLK = (3 + 1) / 16000000 = 0.00000025

 

TQ calculation for FD phase:

TQ = (FPRESDIV + 1) / CANCLK = (0 + 1) / 16000000 = 0.0000000625

For nominal phase:

  • Bit Time =  (number of Tq in 1 bit time) x Tq
  • CAN Bit Time = (1 + (PROPSEG + PSEG1 + 2) + (PSEG2 + 1) ) x Tq
  • CAN Bit Time = (1 + (1 + 2  + 2) + (1 + 1) ) x Tq = 8 x 0.00000025 
  • Baud rate = 1/ CAN Bit Time = 500KHz

For FD phase:

  • CAN Bit Time = (number of Tq in 1 bit time) x Tq
  • CAN Bit Time = (1 + (FPROPSEG + FPSEG1 + 1) + (FPSEG2 + 1) ) x Tq
  • CAN Bit Time = (1 + (0 + 1 + 1) + (1 + 1) ) x Tq = 5 x Tq =  0.0000003125
  • Bit Rate = 1/CAN Bit Time = 1 / 0.0000003125 =  3.2MHz

 

1.125K配置


flexcan_config_t flexcanConfig;
FLEXCAN_GetDefaultConfig(&flexcanConfig);//设置默认值给flexcanConfig
flexcanConfig.baudRate = 125000;//修改波特率125000
flexcanConfig.clkSrc = kFLEXCAN_ClkSrcOsc;//使用外部32M晶振

/*下面参考参考手册37.4.8.7*/
flexcanConfig.timingConfig.phaseSeg1 = 5;(PSEG1 )
flexcanConfig.timingConfig.phaseSeg2 = 4;(PSEG2 )
flexcanConfig.timingConfig.propSeg = 3;(PROPSEG )
flexcanConfig.timingConfig.rJumpwidth = 1;

修改库函数FLEXCAN_SetBaudRate将timingConfig.preDivider设置成0x07(分频PRESDIV ),最好还是不要修改库函数,自己重新定义初始化

波特率125k = 1/((1+3+5+2+4+1)*((7+1)/16000000))

 

2.250k配置

flexcan_config_t flexcanConfig;
FLEXCAN_GetDefaultConfig(&flexcanConfig);//设置默认值给flexcanConfig
flexcanConfig.baudRate = 250000;//修改波特率250000
flexcanConfig.clkSrc = kFLEXCAN_ClkSrcOsc;//使用外部32M晶振

/*下面参考参考手册37.4.8.7*/
flexcanConfig.timingConfig.phaseSeg1 = 2;(PSEG1 )
flexcanConfig.timingConfig.phaseSeg2 = 1;(PSEG2 )
flexcanConfig.timingConfig.propSeg = 1;(PROPSEG )
flexcanConfig.timingConfig.rJumpwidth = 1;

修改库函数FLEXCAN_SetBaudRate将timingConfig.preDivider设置成0x07(分频PRESDIV ),最好还是不要修改库函数,自己重新定义初始化

波特率125k = 1/((1+2+1+2+1+1)*((7+1)/16000000))

3.500k配置

flexcan_config_t flexcanConfig;
FLEXCAN_GetDefaultConfig(&flexcanConfig);//设置默认值给flexcanConfig
flexcanConfig.baudRate = 250000;//修改波特率250000
flexcanConfig.clkSrc = kFLEXCAN_ClkSrcOsc;//使用外部32M晶振

/*下面参考参考手册37.4.8.7*/
flexcanConfig.timingConfig.phaseSeg1 = 2;(PSEG1 )
flexcanConfig.timingConfig.phaseSeg2 = 1;(PSEG2 )
flexcanConfig.timingConfig.propSeg = 1;(PROPSEG )
flexcanConfig.timingConfig.rJumpwidth = 1;

修改库函数FLEXCAN_SetBaudRate将timingConfig.preDivider设置成0x03(分频PRESDIV ),最好还是不要修改库函数,自己重新定义初始化

波特率125k = 1/((1+2+1+2+1+1)*((3+1)/16000000))

 

详细可以看https://community.nxp.com/docs/DOC-341824

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值