STM32中有关CAN总线CAN_SJW、CAN_BS1、CAN_Prescaler是什么?

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/01 00:18:58

STM32中有关CAN总线CAN_SJW、CAN_BS1、CAN_Prescaler是什么?
STM32中有关CAN总线CAN_SJW、CAN_BS1、CAN_Prescaler是什么?

STM32中有关CAN总线CAN_SJW、CAN_BS1、CAN_Prescaler是什么?
CAN总线通信的各节点通信时会产生相位差,所以要进行位同步,两个节点保持步调一致.
CAN_SJW:重新同步跳跃宽度(SJW) .定义了在每位中可以延长或缩短多少个时间单元的上限.其值可以编程为1到4个时间单元.
CAN_BS1:时间段1(BS1):定义采样点的位置.其值可以编程为1到16个时间单元,但也可以被自动延长,以补偿因为网络中不同节点的频率差异所造成的相位的正向漂移.
CAN_BS2:时间段2(BS2):定义发送点的位置.其值可以编程为1到8个时间单元,但也可以被自动缩短以补偿相位的负向漂移.
CAN_Prescaler:直观理解就是分频率.
CAN总线的波特率是取自于总线APB1(PCLK1),通过函数RCC_PCLK1Config给PCLK1配置频率.设置了以上的四个值之后,
CAN总线的波特率=PCLK1/((CAN_SJW +CAN_BS1 + CAN_BS2)*CAN_Prescaler)
假设PCLK1=36MHz、CAN_SJW=1、CAN_BS1=8、CAN_BS2=7、CAN_Prescaler=9
则CAN总线的波特率=PCLK1/((1 + 8 + 7) * 9) = 36MHz / 16 / 9 = 250Kbits
能解释的就这么多,对照着芯片手册和程序例程看看就懂了!