CAN——基于STM32F407ZGT6(下)

CAN——基于STM32F407ZGT6(上)-CSDN博客

STM32的CAN外设

STM32 CAN外设简介

STM32内置bxCAN外设(CAN控制器),支持CAN2.0A和2.0B,可以自动发送CAN报文和按照过滤器自动接收指定CAN报文,程序只需处理报文数据而无需关注总线的电平细节。

  1. 波特率最高可达1兆位/秒

  2. 3个可配置优先级的发送邮箱

  3. 2个3级深度的接收FIFO

  4. 14个过滤器组(互联型28个)

  5. 时间触发通信、自动离线恢复、自动唤醒、禁止自动重传、 接收FIFO溢出处理方式可配置、发送优先级可配置、双CAN模式

一、CAN网拓扑结构

二、CAN框图

1)双CAN框图

STM32 的有两组CAN 控制器,其中CAN1 是主设备,“存储访问控制器”是由CAN1控制的,CAN2 无法直接访问存储区域,所以使用CAN2 的时候必须使能CAN1 外设的时钟。

图中主要包含CAN 控制内核、发送邮箱、接收FIFO 以及验收筛选器。

程序通过读写寄存器来操纵电路的运行

2)CAN基本结构

3)发送过程

基本流程:选择一个空置邮箱→写入报文 →请求发送

4)接收过程

基本流程:接收到一个报文→匹配过滤器后进入FIFO 0或FIFO 1→CPU读取

5)发送和接收配置位

  1. NART:置1,关闭自动重传,CAN报文只被发送1次,不管发送的结果如何(成功、出错或仲裁丢失);置0,自动重传,CAN硬件在发送报文失败时会一直自动重传直到发送成功

  2. TXFP:置1,优先级由发送请求的顺序来决定,先请求的先发送;置0,优先级由报文标识符来决定,标识符值小的先发送(标识符值相等时,邮箱号小的报文先发送)

  3. RFLM:置1,接收FIFO锁定,FIFO溢出时,新收到的报文会被丢弃;置0,禁用FIFO锁定,FIFO溢出时,FIFO中最后收到的报文被新报文覆盖

6)标识符过滤器

每个过滤器的核心由两个32位寄存器组成:R1[31:0]和R2[31:0]

FSCx:位宽设置 置0,16位;置1,32位

FBMx:模式设置 置0,屏蔽模式;置1,列表模式

FFAx:关联设置 置0,FIFO 0;置1,FIFO 1

FACTx:激活设置 置0,禁用;置1,启用

每组筛选器包含2 个32 位的寄存器,分别为CAN_FxR1 和CAN_FxR2,它们用来存储要筛选的ID 或掩码,各个寄存器位代表的意义与图中两个寄存器下面“映射”的一栏一致。

例如,在掩码模式时,第一个寄存器存储要筛选的ID,第二个寄存器存储掩码,掩码为1 的部分表示该位必须与ID 中的内容一致,筛选的结果为表中第三行的ID 值,它是一组包含多个的ID 值,其中x 表示该位可以为1 可以为0。

如果使能了筛选器,且报文的ID 与所有筛选器的配置都不匹配,CAN 外设会丢弃该报文,不存入接收FIFO。

7)过滤器配置示例

8)模式介绍

设置CAN 的工作模式,可设置为正常模式(CAN_Mode_Normal)、回环模式(CAN_Mode_LoopBack)、静默模式(CAN_Mode_Silent) 以及回环静默模式(CAN_Mode_Silent_LoopBack)。

各个工作模式介绍如下:

• 正常模式

正常模式下就是一个正常的CAN 节点,可以向总线发送数据和接收数据。

• 静默模式

静默模式下,它自己的输出端的逻辑0 数据会直接传输到它自己的输入端,逻辑1 可以被发送到总线,所以它不能向总线发送显性位(逻辑0),只能发送隐性位(逻辑1)。输入端可以从总线接收内容。由于它只可发送的隐性位不会强制影响总线的状态,所以把它称为静默模式。这种模式一般用于监测,它可以用于分析总线上的流量,但又不会因为发送显性位而影响总线。

• 回环模式

回环模式下,它自己的输出端的所有内容都直接传输到自己的输入端,输出端的内容同时也会被传输到总线上,即也可使用总线监测它的发送内容。输入端只接收自己发送端的内容,不接收来自总线上的内容。使用回环模式可以进行自检。

• 回环静默模式

回环静默模式是以上两种模式的结合,自己的输出端的所有内容都直接传输到自己的输入端,并且不会向总线发送显性位影响总线,不能通过总线监测它的发送内容。输入端只接收自己发送端的内容,不接收来自总线上的内容。这种方式可以在“热自检”时使用,即自我检查的时候,不会干扰总线。

9)工作模式

初始化模式:用于配置CAN外设,禁止报文的接收和发送 正常模式:配置CAN外设后进入正常模式,以便正常接收和发送报文 睡眠模式:低功耗,CAN外设时钟停止,可使用软件唤醒或者硬件自动唤醒 AWUM:置1,自动唤醒,一旦检测到CAN总线活动,硬件就自动清零SLEEP,唤醒CAN外设;置0,手动唤醒,软件清零SLEEP,唤醒CAN外设

10)位时间特性

波特率 = APB1时钟频率 / 分频系数 / 一位的Tq数量 = 36MHz / (BRP[9:0]+1) / (1 + (TS1[3:0]+1) + (TS2[2:0]+1))

SS = 1Tq BS1 = 1~16Tq BS2 = 1~8Tq

SJW=1~4Tq

11)中断

CAN外设占用4个专用的中断向量

发送中断:发送邮箱空时产生

FIFO 0中断:收到一个报文/FIFO 0满/FIFO 0溢出时产生

FIFO 1中断:收到一个报文/FIFO 1满/FIFO 1溢出时产生

状态改变错误中断:出错/唤醒/进入睡眠时产生

12)时间触发通信

TTCM:置1,开启时间触发通信功能;置0,关闭时间触发通信功能 CAN外设内置一个16位的计数器,用于记录时间戳 TTCM置1后,该计数器在每个CAN位的时间自增一次,溢出后归零 每个发送邮箱和接收FIFO都有一个TIME[15:0]寄存器,发送帧SOF时,硬件捕获计数器值到发送邮箱的TIME寄存器,接收帧SOF时,硬件捕获计数器值到接收FIFO的TIME寄存器 发送邮箱可配置TGT位,捕获计数器值的同时,也把此值写入到数据帧数据段的最后两个字节,为了使用此功能,DLC必须设置为8

13)错误处理和离线恢复

TEC和REC根据错误的情况增加或减少 ABOM:置1,开启离线自动恢复,进入离线状态后,就自动开启恢复过程;置0,关闭离线自动恢复,软件必须先请求进入然后再退出初始化模式,随后恢复过程才被开启

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值