CAN通信协议 HAL库学习
1.CAN介绍
Controller Area Network,是ISO国际标准化的串行通信协议,为了满足汽车产业的“减少线束的数量”,通过多个LAN,进行大量数据的“高速通信”的需求。
低速CAN,通信协议10~125kbps,总线长度可达1000米
高速CAN,通信速率125kbps~1Mbps,总线长度<=40m. 高速CAN是经典CAN
CAN FD通信速率可达5Mbps,并且兼容经典CAN,遵循ISO
CAN总线由两根总线(CANL和CANH)组成,,stm32芯片有CAN外设的,CAN和RS485类似,也是用两根线进行传输,CAN也是使用差分传输,低速CAN是开环总线,高速CAN是闭环总线,允许挂载多个设备节点(低速CAN20个和高速CAN30个),实际看CAN收发器芯片支持多少个
2.CAN总线特点
1.多主控制 每个设备都可以主动发送数据
2,没有类似地址的信息,添加设备不改变原来总线的状态
3.通信速度,速度快,距离远
4.错误检测和错误通知和错误恢复功能
5,故障封闭 判断故障类型,并且进行隔离
6,连接节点多,速度与数量找个平衡
3.CAN应用场景:
CAN总线协议已经广泛应用在汽车电子,工业自动化,船舶,医疗设备,工业设备等方面
4.CAN物理层
CAN使用差分信号进行数据传输,根据CAN_H和CAN_L上的电位差来判断总线电平。总线电平分为显性电平(逻辑0)和隐形电平(逻辑1),二者必居其一。
显性电平具有优先权。发送方通过使总线电平发送变化,将消息发送给接收方。
如高速CAN,显性电平(逻辑0)和隐形电平(逻辑1),二者必居其一。
显性电平(0) Ucan_h - Ucan_l = 2V 隐形电平(1)Ucan_h - Ucan_l = 0V
5,硬件图:跳线帽
CAN收发芯片TJA1050
CANH和CANL之间的电阻用于阻抗匹配,减少回波反射
D引脚:CAN TX R引脚:CAN RX RS引脚:高速/静音模式选择(低电平为高速)
CANH:高电位CAN输入输出端 CANL:低电位CAN电压输入输出端
6.CAN协议层
can总线以“帧”形式通信,CAN协议定义了5种类型的帧:“数据帧”,“遥控帧”,“错误帧”,
“过载帧”,“间隔帧”,其中数据帧最为常用
数据帧和遥控帧最常用
1.数据帧介绍
数据帧分为标准帧(CAN2.0A)和扩展帧(CAN2.0B),主要体现在仲裁段和控制段
数据帧由7段组成,数据帧又分为标准帧(CAN2.0A)和扩展帧(CAN2.0B),主要体现在仲裁段和控制段
显性信号为0,隐形信号为1
2.CAN位时序介绍
CAN总线以“位同步”机制,实现对电平的正确采样。位数据都由四段组成:
同步段(SS),一个Tq
传播时间段(PTS),两个Tq
相位缓冲段1(PBS1)三个Tq
相位缓冲段2(PBS2),三个Tq
每段又由多个时序Tq组成,(Tq可以理解为单位长度)
节点检测到总线信号跳变在SS(同步段),表示节点与总线的时序是同步的,此时采样点的电平就是该位的电平
数据同步过程
硬件同步
再同步
利用普通数据位的边沿信号
再同步补偿宽度,通过SS和帧起始信号边沿信号的差距,通过调节PSB1和PSB2来达到SS和边沿信号同步
CAN总线仲裁 优先级决定
CAN总线处于空闲状态,最先开始发送消息的单元获得发送权。
多个单元同时开始发送时,从仲裁段(报文ID)的第一位开始进行仲裁。连续输出显性电平(逻辑0)最多的单元可继续发送,就是首先出现隐形电平的单元失去对总线的占有权变为接收
报文ID越小的报文
7.STM32CAN控制器介绍
1,CAN控制器介绍
STM32 CAN控制器(bxCAN属于STM32F1,F4,F7的控制器),H7属于FDCAN,可以当成一个经典CAN来用,支持CAN 2.0A和CAN2.0B Active脚本协议
bxCAN主要特点:
波特率最高可达1Mbps(和CAN通信电路有关,CAN通信电路支持的话,才能到达这么高的波特率)
支持时间触发通信((CAN的硬件内部定时器可以在TX/RX的帧起始位的采样点位置生成时间戳))只要配置好就行
2,CAN控制器模式
有三种模式:初始化模式,正常模式,睡眠模式
1.复位后进入睡眠模式(好处是降低功耗)没有数据发送,降低功耗进入睡眠模式
2,当需要对寄存器进行配置需要进入到初始化模式
3,初始化完成后,肯定是要进行CAN通信,你就要得进入正常模式,在CAN总线同步后,就可以开始接收和发送数据了,HAL库函数内部已经进行了寄存器的配置
.CAN控制器的测试模式有三种:静默模式,环回模式和环回静默模式
这三种模式在初始化模式下进行配置对CAN测试模式
3,CAN控制器框图
4,CAN控制器位时序