汽车上使用时出于安全考虑,车厂一般会要求使用外部晶振,只要晶振时钟精确,倍频后的时钟也会是精确的。
ISP软件的CAN波特率计算器里面,CAN2.0协议是用于STC32G12K,STC32G8K系列的标准CAN2.0模块使用。CAN-FD Slow 和 CAN-FD Fast 用于STC32G144K系列带CANFD模块的芯片。
条件相同情况下,CAN-FD Slow 和 CAN-FD Fast 计算出来的参数是一样的,建议选择采样点在 80% 左右的参数:
CAN-FD Slow 是仲裁域,用于低速握手;CAN-FD Fast 是数据域,用于高速传输数据。使用传统CAN2.0模式时,传输速率取决于仲裁域波特率的设置。
例如:
//传统CAN总线的位速率
//仲裁域波特率:Fclk/((SEG1+2)+(SEG2+1))/(Prescaler+1)=120M/120/1=1M
//设定规则:SEG1>=SEG2+1, SEG2>=SJW
stcInit.stcSBT.u8SEG1 = 94U;
stcInit.stcSBT.u8SEG2 = 23U;
stcInit.stcSBT.u8SJW = 23U;
stcInit.stcSBT.u8Prescaler = 0U;
//可变位速率
//数据域波特率:Fclk/((SEG1+2)+(SEG2+1))/(Prescaler+1)=120M/24/1=5M
//设定规则:SEG1>=SEG2, SEG2>=SJW
stcInit.stcFDCfg.stcFBT.u8SEG1 = 17U;
stcInit.stcFDCfg.stcFBT.u8SEG2 = 4U;
stcInit.stcFDCfg.stcFBT.u8SJW = 4U;
stcInit.stcFDCfg.stcFBT.u8Prescaler = 0U;
stcInit.stcFDCfg.u8CANFDMode = CAN_FD_MODE_ISO_11898; //CAN_FD_MODE_BOSCH, CAN_FD_MODE_ISO_11898
stcInit.stcFDCfg.u8TDCSSP = (stcInit.stcFDCfg.stcFBT.u8SEG1 + 2); //TDCSSP 建议设置与 (SEG1+2) 相同值 复制代码