之前项目中,一直用的MB(message buffer)结构和中断方式来接收总线CAN 报文。总线负载率和MCU负载不高的情况下,能够正常接收报文。

总线报文复杂的时候,可以利用CAN-FIFO和硬件过滤来提高MCU接收报文能力和性能。

先理解三个概念:

1)筛选ID;2)掩码;3)FIFO接收

筛选ID:用大白话来讲:就是总线上当前节点接收其他节点ID的范围;

掩码:利用掩码从硬件上过滤当前节点不需要的报文。此处还可以继续分为私有掩码和全局掩码,私有掩码针对单个MB结构来设置滤波,全局掩码可以针对所有MB结构来设置滤波。掩码设置1表示当前bit保持一致,设置0表示当前bit无需保持一致。相比于筛选ID,掩码设置更重要。

FIFO接收:当前CAN处理器在同一时间能够接收多帧报文存放在MB的结构中,存放和读取的顺序按照fifo规则。

此处示例代码:扩展帧,筛选ID=0x12345678,掩码=0x1fffffff,此时只能接收0x12345678的报文。

    //can初始化
FLEXCAN_DRV_Init(INST_CANCOM1, &canCom1_State, &canCom1_InitConfig0);
flexcan_id_table_t canidtable[8];
for(uint8_t i=0;i<8;i++)
{
canidtable[i].isExtendedFrame = true;
canidtable[i].isRemoteFrame = false;
canidtable[i].id = 0x12345678;
}
FLEXCAN_DRV_ConfigRxFifo(INST_CANCOM1,FLEXCAN_RX_FIFO_ID_FORMAT_A,canidtable);
/*私有掩码设置*/
/* FLEXCAN_DRV_SetRxMaskType(INST_CANCOM1,FLEXCAN_RX_MASK_INDIVIDUAL);
for(uint8_t id_index=0;id_index<8;id_index++)
{
FLEXCAN_DRV_SetRxIndividualMask(INST_CANCOM1,FLEXCAN_MSG_ID_STD,id_index,0xc0000000|0x7ff);
}*/
/*全局掩码设置*/
FLEXCAN_DRV_SetRxMaskType(INST_CANCOM1,FLEXCAN_RX_MASK_GLOBAL);
FLEXCAN_DRV_SetRxFifoGlobalMask(INST_CANCOM1,FLEXCAN_MSG_ID_EXT,0x1fffffff);
//注册中断事件
FLEXCAN_DRV_InstallEventCallback(INST_CANCOM1,canRxCallback,NULL); FLEXCAN_DRV_RxFifo(INST_CANCOM1,&can_recmsg);
// CAN发送时要使用到的 标准帧 8byte 数据帧
flexcan_data_info_t can1_data_std_info = {
.msg_id_type = FLEXCAN_MSG_ID_EXT,
.data_length = 8U,
.is_remote = false
};
FLEXCAN_DRV_ConfigTxMb(INST_CANCOM1,10,&can1_data_std_info,0x111);
uint8_t Tx[8] = {0,0x1,0x2,0x3,0x4,0x5,0x6,0x7}; // 通过 CAN0 邮箱10 以默认配置 发送 ID是0x111 数据为0,0x1,0x2,0x3,0x4,0x5,0x6,0x7的报文
FLEXCAN_DRV_Send(INST_CANCOM1, 10, &can1_data_std_info, 0x111, Tx);

测试结果,0x12345678报文可以接收,但是其他ID都接收不了。

S32K146-CAN fifo接收的更多相关文章

  1. AXI4 STREAM DATA FIFO

    参考:http://www.xilinx.com/support/documentation/ip_documentation/axis_infrastructure_ip_suite/v1_1/pg ...

  2. 学习笔记20151211——AXI4 STREAM DATA FIFO

    AXI4 STREAM DATA FIFO是输入输出接口均为AXIS接口的数据缓存器,和其他fifo一样是先进先出形式.可以在跨时钟域的应用中用于数据缓冲,避免亚稳态出现.支持数据的分割和数据拼接.在 ...

  3. 《30天自制操作系统》16_day_学习笔记

    harib13a: 今天我们要继续折腾多任务,任务的高效管理是操作系统的一个重要的任务.在今天,我们将为系统创建更加完善的任务管理系统,其中包括优先级,任务等级等. 1.任务管理结构体 #define ...

  4. Linux编程之给你的程序开后门

    这里说的"后门"并不是教你做坏事,而是让你做好事,搭建自己的调试工具更好地进行调试开发.我们都知道,当程序发生异常错误时,我们需要定位到错误,有时我们还想,我们在不修改程序的前提下 ...

  5. CAN控制器-配置过滤器

    首先简单介绍一下CAN总线,关于CAN总线是谁发明的,CAN总线的历史,CAN总线的发展,CAN总线的应用场合,这些,通通不说.这里只是以我个人理解,简单说说CAN通信.CAN总线的端点没有地址(除非 ...

  6. STM32F0使用LL库实现MS5536C通讯

    在本次项目中,限于空间要求我们选用了STM32F030F4作为控制芯片.这款MCU不但封装紧凑,而且自带的Flash空间也非常有限,所以我们选择了LL库实现.在本文中我们说明一下,使用LL库实现MS5 ...

  7. ARM7与GSM实现的简单的远程控制

    幸好单从控制GSM上来说,并不是太难,它是基于串口通信的,而且全是基于AT指令的控制,说起来,就只是熟悉下指令,而且这次比赛用到的指令也比较少,主要是关于短消息方面的指令.我们用到的指令如下: AT& ...

  8. CAN通信详解

    30.1 CAN简介 30.2 硬件设计 30.3 软件设计 30.4 下载验证 CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议. ...

  9. TMS320F28379D 使用心得之 SCI

    原文地址https://blog.csdn.net/qq_39545674/article/details/82597106 一.SCI 简介SCI(Serial Communication Inte ...

  10. STM32之CAN

    概述:STM32有3个发送邮箱,发送调度器根据优先级决定先发送那个,相当于有3个发送帧FIFO;接收方面有14个过滤器,通过编程可以从CAN的接收引脚中选择需要的报文然后分别给2个接收帧FIFO(每个 ...

随机推荐

  1. Web前端入门第 54 问:JavaScript 3 种书写位置及 script 标签的正确存放位置

    JS 的代码并没有强制规定放在 HTML 中的某个位置,如果您有使用过开发者工具查看过网页源码,那么您会看到很多 JS 代码都以 .js 文件的形式存放,并且放在了 HTML 文件最后,也就是 < ...

  2. C++ 容器(STL容器)

    容器(container)用于存放数据的类模板.可变长数组.链表.平衡二叉树等数据结构在STL中都被实现为容器. 在使用容器时,即将容器类模型实例化为容器类,会指明容器中存放的元素是什么类型. 容器可 ...

  3. 为Feign客户端自定义ErrorDecoder

    摘要:重写Feign的错误解码器ErrorDecoder,以自定义业务逻辑.   ErrorDecoder,顾名思义,它是发生错误或者异常情况时使用的一种解码器,允许我们对异常进行特殊处理.   在配 ...

  4. java实现一个接口多个实现类,并且依次调用指定方法

    接口 package cn.daenx.yhchatsdk.mytest; public interface MyInterface { /** * 返回-1,后面的实现类将不再执行 * 返回0,后面 ...

  5. 2025年6月Docker镜像加速失效终极解决方案

    以下是融合整理的Docker镜像加速终极解决方案,结合基础配置与深度技术方案,形成分层递进的完整体系: 一.分层加速架构 图表 二.全链路解决方案 1. 基础层:公共镜像源(5分钟快速配置) json ...

  6. Java常用类Object

    1 package com.lv.study.pm; 2 3 public class TestObject { 4 5 public static void main(String[] args) ...

  7. 指标+AI+BI:构建数据分析新范式丨2024袋鼠云秋季发布会回顾

    10月30日,袋鼠云成功举办了以"AI驱动,数智未来"为主题的2024年秋季发布会.大会深度探讨了如何凭借 AI 实现新的飞跃,重塑企业的经营管理方式,加速数智化进程. 作为大会的 ...

  8. Web前端入门第 71 问:JavaScript DOM 节点操作(增删改)常用方法

    有一个深有体会的事:发现现在很多前端同学,经常用 Vue 开发项目之后,在某些需求场景要操作 DOM 节点的时,就不知道咋办了~~ 以前接手过其他开发团队的项目,项目被漏洞扫描工具发现了异常,原因是用 ...

  9. Ubuntu22安装

    下载系统 现在已经出了中文官网哦,点次进入并下载 安装系统 用软碟通将下载好的iso系统文件 刻录到你的u盘上 然后重启电脑,从u盘启动,进入引导界面 引导界面点击 install Ubuntu就开始 ...

  10. 简单sock示例程序

    转载与修改 http://blog.chinaunix.net/uid-14833587-id-76539.html #include <stdio.h> #include <std ...