STM32 CAN总线通信学习笔记(一)
一、CAN总线简介
CAN 是控制器局域网络(Controller Area Network, CAN)的简称。CAN采用数据块编码的方式,数据块根据帧的类型,能够让挂载在总线上的不同节点接收到相同的数据,再根据每个节点的配置对信息进行选择性处理(处理or丢弃)。CAN总线具有以下特点:
1. 多主控制
在总线空闲时,所有的单元都可以发送消息;具有CSMA/CA机制,即最先访问总线的单元可获得发送权;多个单元同时发送消息时,优先级高的标志(ID)单元可获得发送权,其中ID并不是发送的目的地址,而是表示访问总线的消息的优先级,仲裁机制会对消息ID的每个位继续比较,仲裁为高优先级的单元可继续发送消息,仲裁失败的单元则停止发送而进行接收工作。
此处对CAN组网编程十分重要!!!
2. 系统柔软性
由于与总线相连的单元没对应的地址信息,因此在编程时比较方便,增加总线上的单元,已连接的其他的单元的软硬件以及应用层都不需要改变。
3. 通信速度
在通信距离小于40m时,速度最高1Mbps,最远可达10km,此时速率小于5Kbps。同一个网络中,所有的单元必须设定为同一个通信速度,类似于串口中要设置为相同的波特率。
4. 错误检测功能、错误通知功能、错误恢复功能
(1)所有的单元都可以检测错误;
(2)检测出错误的单元会立即同时通知其他所有单元;
(3)正在发送消息的单元一旦检测出错误,会强制结束当前的发送。被强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止。
5. 故障封闭
CAN总线可以判断出错误的类型是总线上暂时的数据错误(如外部噪声干扰)还是持续的数据错误(如单元内部故障、断线等),由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。