本帖最后由 lengrudie 于 2024-12-23 18:47 编辑
APM32F103有CAN模块,在很多场合都有用到,使用之前先来介绍一下CAN,后续将更新更多内容。
1.CAN总线(Controller Area Network Bus)控制器局域网总线
• CAN总线是一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线,广泛应用于汽车、嵌入式、工业控制等领域
• CAN总线特征:
两根通信线(CAN_H、CAN_L),线路少
差分信号通信,抗干扰能力强
高速CAN(ISO11898):125k~1Mbps, <40m
低速CAN(ISO11519):10k~125kbps, <1km
异步,无需时钟线,通信速率由设备各自约定
半双工,可挂载多设备,多设备同时发送数据时通过仲裁判断先后顺序
11位/29位报文ID,用于区分消息功能,同时决定优先级
可配置1~8字节的有效载荷
可实现广播式和请求式两种传输方式
应答、CRC校验、位填充、位同步、错误处理等特性
2.主流通信协议对比
3.CAN硬件电路 •每个设备通过CAN收发器挂载在CAN总线网络上
•CAN控制器引出的TX和RX与CAN收发器相连,CAN收发器引出的CAN_H和CAN_L分别与总线的CAN_H和CAN_L相连
•高速CAN使用闭环网络,CAN_H和CAN_L两端添加120Ω的终端电阻
4.CAN电平标准 •CAN总线采用差分信号,即两线电压差(VCAN_H-VCAN_L)传输数据位
•高速CAN规定:
电压差为0V时表示逻辑1(隐性电平) 电压差为2V时表示逻辑0(显性电平)
5.CAN物理层特性
•SOF(Startof Frame):帧起始,表示后面一段波形为传输的数据位
•ID(Identify):标识符,区分功能,同时决定优先级
•RTR(RemoteTransmission Request ):远程请求位,区分数据帧和遥控帧
•IDE(IdentifierExtension):扩展标志位,区分标准格式和扩展格式
•SRR(SubstituteRemote Request):替代RTR,协议升级时留下的无意义位
•r0/r1(Reserve):保留位,为后续协议升级留下空间
•DLC(DataLength Code):数据长度,指示数据段有几个字节
•Data:数据段的1~8个字节有效数据
•CRC(CyclicRedundancy Check):循环冗余校验,校验数据是否正确
•ACK(Acknowledgement):应答位,判断数据有没有被接收方接收
•CRC/ACK界定符:为应答位前后发送方和接收方释放总线留下时间
•EOF(Endof Frame ):帧结束,表示数据位已经传输完毕
2)错误帧
总线上所有设备都会监督总线的数据,一旦发现“位错误”或“填充错误”或“CRC错误”或“格式错误”或“应答错误”,这些设备便会发出错误帧来破坏数据,同时终止当前的发送设备。
3)离线恢复 当 CAN 错误状态寄存器的 TXERRCNT 大于 255 时, CAN 总线控制器就进入离线状态,此时寄存器 CAN_ERRSTS 的 BO** 位置 1,该状态下 CAN 总线控制器不能接收和发送报文。
通过配置寄存器 CAN_MCTRL 的 ALBOFFM 位来决定离线恢复方式:
若 ALBOFFM 位置 1,一旦硬件检测到 128 次 11 位连续的隐性位,则自动退出离线状态;
若 ALBOFFM 位置 0,软件请求进入再退出初始化模式后,退出离线状态
|