STM32F429配置CAN过滤器接收指定帧ID

硬件:阿波罗STM32F429IGTx开发板
软件:keil5,c语言

一、问题描述

使用正点原子的CAN模块,接收指定帧ID的CAN报文。

二、问题分析

根据STM32F429开发指南可知,STM32F429 拥有28个过滤器,每个过滤器是一个 32 位寄存器。其中,每两个过滤器分为一组,共14组。为什么要两两一组呢?是为了提供两种过滤模式:屏蔽位模式和标识符列表模式。

1.屏蔽位模式

以STM32F429中的单组过滤器进行说明:
屏蔽位模式:第一个过滤器存放 验证码(下图中的ID),第二个过滤器存放屏蔽码(下图中的掩码)。
在这里插入图片描述其中,验证码和屏蔽码的作用也很简单:
屏蔽码指定了需要关心的位。
验证码指定了用来比较的值。
以下图为例:假设我们想筛选出第7,8,9,10为数值“1156”的身份证,那么首先可以使用屏蔽码000000111100000000 & 身份证号码,屏蔽掉无关位,只留下我们关心的第7,8,9,10位数值,然后再将结果与我们提前设定好的验证码000000115600000000 进行比较。如果判断相同,就得到了我们想要的身份证号码,如果不同就舍弃。

在这里插入图片描述在这种模式下,每两个过滤器为一组,限制帧ID的接收。

2.列表模式

以STM32F429中的单组过滤器进行说明:
列表模式:第一个过滤器存放 验证码(下图中的ID),第二个过滤器仍存放验证码(下图中的第二个ID)。
在这里插入图片描述这个就原理更简单啦:
验证码直接标识了我们想要的值。
假设我们只想接收为1826f456的帧ID,就设置验证码为此数值就可以了,将收到的帧ID与设置的验证码进行比较即可。
在这种模式下,每个过滤器都可以标识一个指定的帧ID,所以最多可以接收28个帧ID。

3.其他

由于STM32F429 每个过滤器组的位宽都可以独立配置,以满足应用程序的不同需求。根据位宽
的不同,每个过滤器组可提供:
● 1 个 32 位过滤器,包括:STDID[10:0]、EXTID[17:0]、IDE 和 RTR 位
● 2 个 16 位过滤器,包括:STDID[10:0]、IDE、RTR 和 EXTID[17:15]位
如果我们接收CAN报文的扩展帧,扩展帧ID为29位,就可以选用32位的过滤器。如果接收CAN报文的标准帧,标准帧ID为11位,就可以选用16位的过滤器。两种情况都考虑到了,真的很方便。
下图中最右边的筛选器编号,就是之前说的过滤器组。
两个过滤器为一组,编号范围为0-13。
在这里插入图片描述

三、问题解决

我的需求是接收4个各不相同的扩展帧ID,所以考虑使用列表模式。实现代码如下:(打开can.c文件)
下面展示一些 内联代码片

// An highlighted block
u8 CAN1_Mode_Init(u32 tsjw,u32 tbs2,u32 tbs1,u16 brp,u32 mode)
{
   
   
	//标识符列表模式,仅允许接收为以下ID的帧
	u32 ExtId1 =0x1826F456;
	u32 ExtId2 =0x1801f456;
	u32 ExtId3 =0x1807F456;
	u32 ExtId4 =0x1808F456;
	
    CAN_FilterConfTypeDef  CAN1_FilerConf;
    
    CAN1_Handler.Instance=CAN1
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值