1、can简介
1.1、显性电平和隐性电平
- 概念图(低速)
- 显性电平:逻辑0 CAN_H和CAN_L电压差大
- 隐性电平:逻辑1 CAN_H和CAN_L电压差小
- 在总线上显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平
- 出现连续的11位隐性电平,那么总线就处于空闲状态
1.2、报文(帧)的类型
- 数据帧
发送单元向接收单元传送数据的帧 - 遥控帧
接收单元向具有相同 ID 的发送单元请求数据的帧 - 错误帧
当检测出错误时向其它单元通知错误的帧 - 过载帧
接收单元通知其尚未做好接收准备的帧 - 间隔帧
将数据帧及遥控帧与前面的帧分离开来的帧
1.3、数据帧
0:显性 — 1:隐性 MSB:最高位 — LSB:最低位
- 帧起始
SOF(1位0 ) - 仲裁段
ID:数据的id ,决定优先级 禁止高 7 位都为1(禁止设定: ID=1111111XXXX) RTR:是否是远程帧(0:数据帧;1:远程帧) SRR:代替远程请求位,为1,它代替了标准帧中的 RTR 位 - 控制段
IDE:标识符选择位( 0:标准标识符; 1:扩展标识符) r0/r1:保留位,发送必须是0,接收可以是0或1 DLC:长度表示段,MSB在前,有效值为 0~8,但是接收方接收到 9~15 的时候并不认为是错误。 - 数据段
该段可包含 0~8 个字节的数据。从MSB开始输出,标准帧和扩展帧在这个段的定义都是一样的 - CRC段
计算范围: 帧起始、仲裁段、控制段、数据段。 接收方以同样的算法计算 CRC 值并比较,不一致时会报错 - ACK段
发送方的 ACK,发送 2 个位的1 接收方确认后发送 1位的0
1.4、位时序
由发送单元在非同步的情况下发送的每秒钟的位数称为位速率,一个位可分为 4 段 每个段又由若干个 Time Quantum(以下称为 Tq) 构成,这称为位时序
- 同步段( SS)
- 传播时间段( PTS)
- 相位缓冲段 1( PBS1)
- 相位缓冲段 2( PBS2)
- 对应cubemx
1tq = (16/45M) * (10^9) ns 波特率:45/(1+2+1)/16 时钟/(bs1+bs2+sjw)/分频
- 采样点
1.5、工作模式
-
静默模式 节点的输出端的逻辑0数据会直接传输到自己的输入端 逻辑1可以被发送到总线 所以它不能向总线发送显性位(0), 只能发送隐性位(1)。 输入端可以从总线接收内容。 -
环回模式 节点输出端的所有内容都直接传输到自己的输入端 输出端的内容同时也会被传输到总线上 输入端只接收自己发送端的内容,不接收来自总线上的内容。 使用回环模式可以进行自检。 -
环回与静默组合模式 节点的输出端的所有内容都直接传输到自己的输入端 输入端不接收来自总线上的内容 不会向总线发送显性位影响总线
对应cubemx
2、can寄存器
2.1、主控制寄存器
主控制寄存器 (CAN_MCR) CAN master control register
- 位 7 TTCM:时间触发通信模式
(Time triggered communication mode) 0:禁止时间触发通信模式。 1:使能时间触发通信模式。 - 位 6 ABOM: 自动的总线关闭管理
(Automatic bus-off management) 此位控制 CAN 硬件在退出总线关闭状态时的行为。 0:在软件发出请求后,一旦监测到 128 次连续 11 个隐性位 软件将 CAN_MCR 寄存器的 INRQ 位先置 1 再清零,即退出总线关闭状态。 1:一旦监测到 128 次连续 11 个隐性位,即通过硬件自动退出总线关闭状态。 - 位 5 AWUM: 自动唤醒模式
(Automatic wakeup mode) 此位控制 CAN 硬件在睡眠模式下接收到消息时的行为。 0:在软件通过将 CAN_MCR 寄存器的 SLEEP 位清零发出请求后,退出睡眠模式。 1:一旦监测到 CAN 消息,即通过硬件自动退出睡眠模式。 CAN_MCR 寄存器的 SLEEP 位和 CAN_MCR 寄存器的 SLAK 位由硬件清零。 - 位 4 NART: 禁止自动重发送
(No automatic retransmission) 0: CAN 硬件将自动重发送消息,直到根据 CAN 标准消息发送成功。 1:无论发送结果如何(成功、错误或仲裁丢失),消息均只发送一次。 - 位 3 RFLM: 接收 FIFO 锁定模式
(Receive FIFO locked mode) 0:接收 FIFO 上溢后不锁定。接收 FIFO 装满后,下一条传入消息将覆盖前一条消息。 1:接收 FIFO 上溢后锁定。接收 FIFO 装满后,下一条传入消息将被丢弃。 - 位 2 TXFP: 发送 FIFO 优先级
(Transmit FIFO priority) 此位用于控制在几个邮箱同时挂起时的发送顺序。 0:优先级由消息标识符确定 1:优先级由请求顺序(时间顺序)确定
对应cubemx
2.2、位时序寄存器
位时序寄存器 (CAN_BTR) CAN bit timing register
- 位 31 SILM: 静默模式(调试)
(Silent mode (debug)) 0:正常工作 1:静默模式 - 位 30 LBKM: 环回模式(调试)
(Loop back mode (debug)) 0:禁止环回模式 1:使能环回模式
|