搜索
12
返回列表 发新帖
楼主: 撮合天

[求助] 关于STM32H7CAN通信过滤器的问题

[复制链接]

该用户从未签到

2

主题

11

帖子

0

蝴蝶豆

初级会员

最后登录
2019-5-8
 楼主| 发表于 2019-4-22 17:29:31 | 显示全部楼层
wh8 发表于 2019-4-19 12:02
应该是过滤器的标准帧ID要偏移5bit。然后你过滤掩码也有问题,需要过滤的位全部置为1,不需要的是0。比如我 ...

回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

11

帖子

0

蝴蝶豆

初级会员

最后登录
2019-5-8
 楼主| 发表于 2019-4-22 17:30:41 | 显示全部楼层
wh8 发表于 2019-4-19 12:02
应该是过滤器的标准帧ID要偏移5bit。然后你过滤掩码也有问题,需要过滤的位全部置为1,不需要的是0。比如我 ...

那个我后来修改了
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

11

帖子

0

蝴蝶豆

初级会员

最后登录
2019-5-8
 楼主| 发表于 2019-4-22 17:31:44 | 显示全部楼层
wh8 发表于 2019-4-19 12:02
应该是过滤器的标准帧ID要偏移5bit。然后你过滤掩码也有问题,需要过滤的位全部置为1,不需要的是0。比如我 ...

FDCAN1_RXFilter.IdType=FDCAN_STANDARD_ID;                       //标准ID
    FDCAN1_RXFilter.FilterIndex=0;                                  //滤波器索引                  
    FDCAN1_RXFilter.FilterType=FDCAN_FILTER_MASK;                   //滤波器类型
    FDCAN1_RXFilter.FilterConfig=FDCAN_FILTER_TO_RXFIFO0;           //过滤器0关联到FIFO0  
    FDCAN1_RXFilter.FilterID1=0xE1800000;                               //32位ID     
    FDCAN1_RXFilter.FilterID2=0xFFE00006;
                               //如果FDCAN配置为传统模式的话,这里是32位掩码
    if(HAL_FDCAN_ConfigFilter(&FDCAN1_Handler,&FDCAN1_RXFilter)!=HAL_OK) return 2;//滤波器初始化
    HAL_FDCAN_ConfigGlobalFilter(&FDCAN1_Handler,0, 0, 1, 1);   
    HAL_FDCAN_Start(&FDCAN1_Handler);                               //开启FDCAN
    HAL_FDCAN_ActivateNotification(&FDCAN1_Handler,FDCAN_IT_RX_FIFO0_NEW_MESSAGE,0);
    return 0;
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

11

帖子

0

蝴蝶豆

初级会员

最后登录
2019-5-8
 楼主| 发表于 2019-4-22 17:34:25 | 显示全部楼层
你若安好_清风徐来 发表于 2019-4-19 11:26
我有做两个CAN模块通信,没有做过CAN和其他模块通信  ,可以参考一下  我手上没有模块也不能测试uint8_t  ...

这个配置只能是不过滤把,不过滤程序是可以的
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

22

帖子

2

蝴蝶豆

中级会员

最后登录
2019-11-23
发表于 2019-5-6 18:57:19 | 显示全部楼层
楼主有用过FIFO1吗?我用FIFO1接收不到数据
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

11

帖子

0

蝴蝶豆

初级会员

最后登录
2019-5-8
 楼主| 发表于 2019-5-8 14:07:22 | 显示全部楼层
15268851967@163 发表于 2019-5-6 18:57
楼主有用过FIFO1吗?我用FIFO1接收不到数据

没有呀,因为最近用它做毕设,所以只是用了一部分功能,没有系统的学
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

51

帖子

10

蝴蝶豆

中级会员

最后登录
2021-2-24
发表于 2019-5-8 16:29:31 | 显示全部楼层
调用启用全局滤波配置函数 HAL_FDCAN_ConfigGlobalFilter(&FDCAN1_Handler,FDCAN_REJECT, FDCAN_REJECT, ENABLE, ENABLE);
应该放到 你配置完滤波初始化的后面 if(HAL_FDCAN_ConfigFilter(&FDCAN1_Handler,&FDCAN1_RXFilter)!=HAL_OK) return 2;//滤波器初始化

至少你要先把CAN的外设初始化完毕才能做其他配置 你在CAN外设初始化前面就开始调用全局滤波已定会失败的,因为CAN处于关闭状态

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

54

主题

499

帖子

152

蝴蝶豆

论坛元老

最后登录
2021-3-29
发表于 2019-5-25 17:13:43 | 显示全部楼层
本帖最后由 奏奏奏 于 2019-5-25 17:56 编辑

刚自己改好验证过的CAN滤波器设置代码:


对标准数据帧过滤只接收标准数据帧)
//CAN滤波器设置
void CAN_Filter_Set(void)
{

  hcan.pTxMsg = &TxMessage;
  hcan.pRxMsg = &RxMessage;
  sFilterConfig.FilterNumber = 0;
  sFilterConfig.FilterMode = CAN_FILTERMODE_IDLIST;
  sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
  sFilterConfig.FilterIdHigh = (((uint32_t)CAN_ID<<21)&0xffff0000)>>16;
  sFilterConfig.FilterIdLow = (((uint32_t)CAN_ID<<21)|CAN_ID_STD|CAN_RTR_DATA)&0xffff;
  sFilterConfig.FilterMaskIdHigh = 0xFFFF;
  sFilterConfig.FilterMaskIdLow = 0xFFFF;
        
  sFilterConfig.FilterFIFOAssignment = 0;
  sFilterConfig.FilterActivation = ENABLE;
  sFilterConfig.BankNumber = 14;
  HAL_CAN_ConfigFilter(&hcan, &sFilterConfig);
}


其中 CAN_ID就是目标的CAN地址

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-23 15:19 , Processed in 0.162953 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表