首页 > 其他分享 >CAN 过滤器多个配置

CAN 过滤器多个配置

时间:2022-10-19 13:34:18浏览次数:52  
标签:HAL 多个 配置 FDCAN FDCAN1 Init Handler RXFilter 过滤器

STM32H750 扩展帧多个过滤器配置示例

u8 FDCAN1_Mode_Init(u16 presc,u8 ntsjw,u16 ntsg1,u8 ntsg2,u32 mode)
{
    FDCAN_ClkCalUnitTypeDef FDCAN1_ClkCalUnit;
    FDCAN_FilterTypeDef FDCAN1_RXFilter;
    FDCAN_FilterTypeDef FDCAN1_RXFilter1;

    //初始化FDCAN1
    HAL_FDCAN_DeInit(&FDCAN1_Handler);                              //先清除以前的设置
    FDCAN1_Handler.Instance=FDCAN1;
    FDCAN1_Handler.Init.FrameFormat=FDCAN_FRAME_CLASSIC;            //传统模式
    FDCAN1_Handler.Init.Mode=mode;                                  //回环测试
    FDCAN1_Handler.Init.AutoRetransmission=DISABLE;                 //关闭自动重传!传统模式下一定要关闭!!!
    FDCAN1_Handler.Init.TransmitPause=DISABLE;                      //关闭传输暂停
    FDCAN1_Handler.Init.ProtocolException=DISABLE;                  //关闭协议异常处理
    FDCAN1_Handler.Init.NominalPrescaler=presc;                     //分频系数
    FDCAN1_Handler.Init.NominalSyncJumpWidth=ntsjw;                 //重新同步跳跃宽度
    FDCAN1_Handler.Init.NominalTimeSeg1=ntsg1;                      //tsg1范围:2~256
    FDCAN1_Handler.Init.NominalTimeSeg2=ntsg2;                      //tsg2范围:2~128
    FDCAN1_Handler.Init.MessageRAMOffset=0;                         //信息RAM偏移
    FDCAN1_Handler.Init.StdFiltersNbr=1;                            //标准信息ID滤波器编号,标准帧过滤器个数 0-128
    FDCAN1_Handler.Init.ExtFiltersNbr=2;                            //扩展信息ID滤波器编号,扩展帧过滤器个数 0-64
    FDCAN1_Handler.Init.RxFifo0ElmtsNbr=1;                          //接收FIFO0元素编号
    FDCAN1_Handler.Init.RxFifo0ElmtSize=FDCAN_DATA_BYTES_8;         //接收FIFO0元素大小:8字节
    FDCAN1_Handler.Init.RxBuffersNbr=0;                             //接收缓冲编号
    FDCAN1_Handler.Init.TxEventsNbr=0;                              //发送事件编号
    FDCAN1_Handler.Init.TxBuffersNbr=0;                             //发送缓冲编号
    FDCAN1_Handler.Init.TxFifoQueueElmtsNbr=1;                      //发送FIFO序列元素编号
    FDCAN1_Handler.Init.TxFifoQueueMode=FDCAN_TX_FIFO_OPERATION;    //发送FIFO序列模式
    FDCAN1_Handler.Init.TxElmtSize=FDCAN_DATA_BYTES_8;              //发送大小:8字节
    if(HAL_FDCAN_Init(&FDCAN1_Handler)!=HAL_OK) return 1;           //初始化FDCAN
    
    FDCAN1_ClkCalUnit.ClockCalibration=DISABLE;                     //关闭时钟校准
    FDCAN1_ClkCalUnit.ClockDivider=FDCAN_CLOCK_DIV2;                //时钟分频值
    HAL_FDCAN_ConfigClockCalibration(&FDCAN1_Handler,&FDCAN1_ClkCalUnit);//设置分频

    //配置RX滤波器
	//过滤id 在 0CEACB00 和 0CEACBFF 之间的
    FDCAN1_RXFilter.IdType=FDCAN_EXTENDED_ID;                       //标准ID
    FDCAN1_RXFilter.FilterIndex=0;                                  //滤波器索引id
    FDCAN1_RXFilter.FilterType=FDCAN_FILTER_RANGE_NO_EIDM;                   //滤波器类型
    FDCAN1_RXFilter.FilterConfig=FDCAN_FILTER_TO_RXFIFO0;           //过滤器0关联到FIFO0
    FDCAN1_RXFilter.FilterID1=0x0CEACB00;                               //32位ID
    FDCAN1_RXFilter.FilterID2=0x0CEACBFF;                               //如果FDCAN配置为传统模式的话,这里是32位掩码
    if(HAL_FDCAN_ConfigFilter(&FDCAN1_Handler,&FDCAN1_RXFilter)!=HAL_OK) return 2;//滤波器初始化

    //过滤id为 0CABCB68 和 0CACCB68 的
    FDCAN1_RXFilter1.IdType=FDCAN_EXTENDED_ID;                       //标准ID
    FDCAN1_RXFilter1.FilterIndex=1;                                  //滤波器索引id
    FDCAN1_RXFilter1.FilterType=FDCAN_FILTER_DUAL;                   //滤波器类型
    FDCAN1_RXFilter1.FilterConfig=FDCAN_FILTER_TO_RXFIFO0;           //过滤器0关联到FIFO0
    FDCAN1_RXFilter1.FilterID1=0x0CABCB68;                               //32位ID
    FDCAN1_RXFilter1.FilterID2=0x0CACCB68;                               //如果FDCAN配置为传统模式的话,这里是32位掩码
    if(HAL_FDCAN_ConfigFilter(&FDCAN1_Handler,&FDCAN1_RXFilter1)!=HAL_OK) return 2;//滤波器初始化

    //拒绝所有帧,如果包含上述条件的帧则通过
    HAL_FDCAN_ConfigGlobalFilter(&FDCAN1_Handler,FDCAN_REJECT, FDCAN_REJECT, DISABLE, ENABLE);     //FDCAN_ACCEPT_IN_RX_FIFO0
    
    HAL_FDCAN_Start(&FDCAN1_Handler);                               //开启FDCAN
    HAL_FDCAN_ActivateNotification(&FDCAN1_Handler,FDCAN_IT_RX_FIFO0_NEW_MESSAGE,0);
    return 0;
}

最终实验结果,在can上位机当中只有id符合条件的,arm才能收到
image

image

标签:HAL,多个,配置,FDCAN,FDCAN1,Init,Handler,RXFilter,过滤器
From: https://www.cnblogs.com/han-guang-xue/p/16805916.html

相关文章

  • 使用Kong网关API接口配置
    一、Upstream1、创建Upstream:curl-i-XPOSTIPAddress:8001/upstreams-d'name=upstream-test'-d'slots=1000'2、创建Targets目标地址并且关联Upstream:curl-i-XPO......
  • 烂笔头笔记:Windows 10下配置ssh免密钥访问需要注意的事项
    目录​​简介​​​​开启ssh-agent服务​​​​密钥文件访问权限问题​​​​关于多个密钥如何使用​​​​关于多个服务器如何使用​​​​测试配置是否正确​​简介从Win......
  • baodoumi yml配置
    上次因为自增,发现配置没生效,修改后如下  #配置mybatis-plus,参考:com.baomidou.mybatisplus.autoconfigure.MybatisPlusPropertiesmybatis-plus:#扫描mapp......
  • ini配置文件与ConfigParser对象
    ini配置文件与ConfigParser对象目录结构​​ini配置文件与ConfigParser对象​​​​ini配置文件简介​​​​configparser模块中的ConfigParser类​​​​常用方法​​​​......
  • 10-git配置比较工具
    git配置比较工具1.修改.gitconfig文件[diff]tool=bc4[difftool]prompt=false[difftool"bc4"]cmd="\"C:/Users/xxx/AppData/Local/BeyondCompare4/BComp.ex......
  • windows环境使用tomcat部署jenkins配置
    一、安装包下载jdk:https://www.oracle.com/java/technologies/downloads/#java8tomcat:https://tomcat.apache.org/download-80.cgijenkins.war:http://updates.jenkins-c......
  • linux操作系统源配置
    centos: https://blog.csdn.net/ludaoyi88/article/details/112298699https://www.cnblogs.com/Hi-blog/p/9354441.htmldebian:http://www.szxiangbin.com/article/12......
  • 【ENSP】华为多级帧中继交换的【FRSW】的配置
    一、任务:  二、任务一【全连接】配置实现:  FRSW4配置信息:   FRSW3配置信息:   FRSW2配置信息:  在R4、R5、R6的S0/0/0启用FR协议和配置IP地址,即......
  • mac版PS2023来了!一键删除、填充、照片恢复神经过滤器
    期盼已久的mac版PS2023终于来了,Photoshop2023带来了选择工具升级、一键删除和填充、邀请编辑、照片恢复神经过滤器等。最新版Photoshop2023Photoshop2023新功能1......
  • nginx本地配置web项目-layui
    nginx安装配置以及配置本地web项目nginx下载和安装介绍nginx(enginex)是一个高性能的HTTP和反向代理web服务器,其他的介绍自己百度去看下载https://nginx.org/en/downl......