STM32 CAN控制器

一、CAN控制器介绍

STM32 CAN控制器(bxCAN),支持CAN2.0A和CAN2.0B Active 版本协议
CAN 2.0A 只能处理标准数据帧且扩展帧内容会识别错误,而CAN 2.0B Active 可以处理标准数据帧和扩展数据帧。 CAN 2.0B Passive 只能处理标准数据帧且扩展帧内容会忽略。
波特率最高可达 1M bps
支持时间触发通信(CAN的硬件内部定时器可以再TX/RX的帧起始位的采样点位置生成时间戳)
具有3级发送邮箱
具有3级深度2个接收FIFO
可变的过滤组(最多28个)

二、CAN控制器模式

CAN控制器的模式有三种:初始化模式、正常模式、睡眠模式
CAN控制器的测试模式有三种:静默模式、环回模式、环回静默模式

三、CAN控制器框图

在这里插入图片描述1、CAN 内核
包含各种控制/状态/配置寄存器,可以配置模式、波特率等
2、发送邮箱
用来缓存待发送的报文,最多可缓存三个报文
3、接收FIFO
缓存接收到的有效报文
4、接收过滤器
筛选有效报文

发送处理

在这里插入图片描述
发送优先级由邮箱中报文的标识符决定。标识符数值越低有最高优先级。如果标识符相同,邮箱小的先被发送

接收处理

在这里插入图片描述有效报文指的是(数据帧直到EOF段的最后一位都没有错误),且通过过滤器组对标识符过滤。

接收过滤器
当总线上报文数量很大时,总线上的设备会频繁获取报文,占用CPU。过滤器的存在,选择性接收有效报文,减轻系统负担。
每个过滤器组都有两个32位寄存器CAN_FxR1和CAN_FxR2。根据过滤器组的工作模式不同,寄存器的作用也不同。
位宽可设置为32位或者16位。寄存器存储的内容就有所区别。
选择模式可设置为屏蔽位模式或标识符列表模式,寄存器内容的功能就有所区别。

在这里插入图片描述举个简单的例子,我们设置过滤器组 0 工作在:1 个 32 为位过滤器-标识符屏蔽模式,然
后设置 CAN_F0R1=0XFFFF0000,CAN_F0R2=0XFF00FF00。其中存放到 CAN_F0R1 的值就是期望收到的 ID,即我们希望收到的映(STID+EXTID+IDE+RTR)最好是:0XFFFF0000。而0XFF00FF00 就是设置我们需要必须关心的 ID,表示收到的映像,其位[31:24]和位[15:8]这 16个位的必须和 CAN_F0R1 中对应的位一模一样,而另外的 16 个位则不关心,可以一样,也可以不一样,都认为是正确的 ID,即收到的映像必须是 0XFFxx00xx,才算是正确的(x 表示不关心)。这里需要注意的是标识符选择位 IDE 和帧类型 RTR 需要一致。
在这里插入图片描述

四、CAN控制器时序

在这里插入图片描述STM32 把传播时间段和相位缓冲段 1(STM32 称之为时间段 1)合并了,所以 STM32 的 CAN 一个位只有 3 段:同步段(SYNC_SEG)、时间段 1(BS1)和时间段 2(BS2)。STM32 的 BS1 段可以设置为 1~16 个时间单元。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值