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

关于STM32H7CAN通信过滤器的问题

[复制链接]
撮合天 提问时间:2019-4-15 11:37 /
阅读主题, 点击返回1楼
收藏 评论17 发布时间:2019-4-15 11:37
17个回答
撮合天 回答时间: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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版