CAN 总线是一种在汽车领域常见的通讯协议总线。STM32 支持 CAN 协议。这里简单的对 STM32 平台上 CAN 总线的使用做一个示例,起到抛砖引玉的作用。首先明确一个概念 :CAN 总线中不是以时钟或者逻辑电平来表示'0'和'1'的,而是采用隐性位和显性位来表示 :
l、隐性位与显性位
CAN总线为”隐性”(逻辑1)时, CAN_H 和 CAN_L的电平为2.5V(电位差为0V);
CAN总线为”显性”(逻辑0)时, CAN_H 和 CAN_L的电平为3.5V和1.5V(电位差为2.5);
2、STM32 总 CAN 总线波特率设置
CAN 波特率 |
参数设置 |
5 KBps |
CAN_SJW = CAN_SJW_2tq CAN_BS1 = CAN_BS1_6tq CAN_BS2 = CAN_BS2_4tq CAN_Prescaler = 600 |
10 KBps |
CAN_SJW = CAN_SJW_1tq CAN_BS1 = CAN_BS1_3tq CAN_BS2 = CAN_BS2_2tq CAN_Prescaler = 600 |
20 KBps |
CAN_SJW = CAN_SJW_1tq CAN_BS1 = CAN_BS1_3tq CAN_BS2 = CAN_BS2_2tq CAN_Prescaler = 300 |
25 KBps |
CAN_SJW = CAN_SJW_1tq CAN_BS1 = CAN_BS1_3tq CAN_BS2 = CAN_BS2_2tq CAN_Prescaler = 240 |