你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32H7CAN通信过滤器的问题

[复制链接]
撮合天 提问时间:2019-4-15 11:37 /
阅读主题, 点击返回1楼
收藏 评论17 发布时间:2019-4-15 11:37
17个回答
撮合天 回答时间:2019-4-22 17:29:31
wh8 发表于 2019-4-19 12:02
应该是过滤器的标准帧ID要偏移5bit。然后你过滤掩码也有问题,需要过滤的位全部置为1,不需要的是0。比如我 ...

撮合天 回答时间:2019-4-22 17:30:41
wh8 发表于 2019-4-19 12:02
应该是过滤器的标准帧ID要偏移5bit。然后你过滤掩码也有问题,需要过滤的位全部置为1,不需要的是0。比如我 ...

那个我后来修改了
撮合天 回答时间: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;
撮合天 回答时间:2019-4-22 17:34:25
你若安好_清风徐来 发表于 2019-4-19 11:26
我有做两个CAN模块通信,没有做过CAN和其他模块通信  ,可以参考一下  我手上没有模块也不能测试uint8_t  ...

这个配置只能是不过滤把,不过滤程序是可以的
15268851967@163 回答时间:2019-5-6 18:57:19
楼主有用过FIFO1吗?我用FIFO1接收不到数据
撮合天 回答时间:2019-5-8 14:07:22
15268851967@163 发表于 2019-5-6 18:57
楼主有用过FIFO1吗?我用FIFO1接收不到数据

没有呀,因为最近用它做毕设,所以只是用了一部分功能,没有系统的学
oujisang 回答时间: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

查看全部评分

奏奏奏 回答时间: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

查看全部评分

12

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版