赞
踩
文章分两部分,一是CAN的详解,二是常见问题汇总;文章长,但是都是重点精华,往有帮助~
(参考的是火哥的STM32有关CAN协议的文档)
一、CAN的详解
1. 物理层
2. 协议层
3. STM32有关CAN的配置
①测试模式包括:正常模式、静默模式、回环模式及静默回环模式;
②位时序:
STM32 的 CAN 外设位时序中只包含 3 段,分别是同步段 SYNC_SEG、位段 BS1 及位段 BS2,采样点位于 BS1 及 BS2 段的交界处;这个位时序对应了CAN一个数据位的不同段,即N*Tq=一个数据位;
③计算波特率:
一个数据位的Tq是等于同步段、BS1和BS2段这三个段Tq的总和,CAN1和CAN2挂载在APB1上,位时序寄存器可以分频时钟,Tq=分频数/36MHz,CAN的波特率=1/N*Tq。
二、STM32对CAN的发送邮箱
三、STM32对CAN的接收邮箱FIFO:它一共有 2 个接收 FIFO,每个 FIFO 中有 3 个邮箱,即最多可以缓存 6 个接收到的报文;
四、验收筛选器:有 14个筛选器组,每个筛选器组有 2 个寄存器。
发送节点将报文广播给所有接收器时,接收节点会根据报文标识符的值来确定软件是否需要该消息,为了简化软件的工作, STM32 的 CAN 外设接收报文前会先使用验收筛选器检查,只接收需要的报文到 FIFO 中;
(1) 标识符列表模式,它把要接收报文的 ID 列成一个表,要求报文 ID 与列表中的某一个标识符完全相同才可以接收,可以理解为白名单管理。
(2) 掩码模式,它把可接收报文 ID 的某几位作为列表,这几位被称为掩码,可以把它理解成关键字搜索,只要掩码(关键字)相同,就符合要求,报文就会被保存到接收 FIFO。
4. STM32软件编程
(1)配置GPIO,开时钟,设定好对应的引脚,对应到TX和RX;
(2)配置CAN初始化结构体,即配置工作模式,先开时钟;
(3)配置筛选器
(4)配置发送报文:包括使用扩展还是标准的ID,选择扩展还是标准模式,发送是数据还是其他内容,设置数据的长度,设置将要发送的数据:
(5)在中断中接收报文,因此要分为以下两个步骤
二、CAN的常见问题
1、Can总线有什么了解?可以从物理层、协议层再到STM32对CAN三个方面去介绍。
2、仲裁机制?以ID来区别优先级,若有两个节点同时发送数据,那么由于是半双工,在一个时间只能一个节点发送数据,那么就要比较这两个节点的ID,谁的ID先出现隐性电平,即高电平,谁就失去了对CAN发送数据的控制权。
3、can总线,波特率?(与Tq的大小,即与时钟大小有关;一个数据位包括的Tq的个数有关)帧?(了解到的是数据帧,包括起始帧、仲裁帧、控制帧、数据帧、校验帧、应答帧、结束帧)报文?(具体:在原始数据段的前面加上传输起始标签、片选(识别)标签和控制标签,在数据的尾段加上 CRC 校验标签、应答标签和传输结束标签,把这些内容按特定的格式打包好,就可以用一个通道表达各种信号了,这样的报文就被称为 CAN 的“数据帧”)
4、can的传输距离,分为开环和闭环,闭环是高速近距离:10Mbps传输40m,开环是低速远距离:125kbps传输1km。
5、CAN初始化配置步骤?看软件编程那里
6、CAN发送数据格式?
总结就是:包括使用扩展还是标准的ID,选择扩展还是标准模式,发送是数据还是其他东西,设置数据的长度,设置将要发送的数据。
7、CAN总线是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电子干扰性,并且能够检测出产生的任何错误。
8、CAN总线原理:CAN总线以广播的方式从一个节点向另一个节点发送数据,当一个节点发送数据时,该节点的CPU把将要发送的数据和标识符发送给本节点的CAN芯片,并使其进入准备状态;一旦该CAN芯片收到总线分配,就变为发送报文状态,该CAN芯片将要发送的数据组成规定的报文格式发出。此时,网络中其他的节点都处于接收状态,所有节点都要先对其进行接收,通过检测来判断该报文是否是发给自己的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。