[STM32F4] CAN 控制器仅能启用一个 filter-bank 配置

[复制链接]
 楼主| WHALEE 发表于 2025-4-21 10:00 | 显示全部楼层 |阅读模式


用 STM32F413- Nucleo F413Zh 开发板,Mask/ID list 模式可以使用不同数量的滤波器组,如何配置启用单个滤波器组或启用所有组?32 /16位模式 也改变mask模式或 Id 模式的滤波器组数量。filterbank # 定义被修改的 filterbank 。以下代码就是我多个滤波器组的方法:

// for (filterNo = 0; filterNo < CAN1_FILTER_CNT; filterNo++){
//   sFilterConfig.FilterBank = filterNo;
//   sFilterConfig.FilterMode = CAN1_FilterMode[filterNo];
//   sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
//   sFilterConfig.FilterIdHigh = CAN1_ID_HiWord[filterNo];
//   sFilterConfig.FilterIdLow = CAN1_ID_LoWord[filterNo];
//   sFilterConfig.FilterMaskIdHigh = CAN1_FilterMaskHiWord[filterNo];
//   sFilterConfig.FilterMaskIdLow = CAN1_FilterMaskLoWord[filterNo];
//   sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
//   sFilterConfig.FilterActivation = ENABLE;
//   sFilterConfig.SlaveStartFilterBank = 14;
//
//   if(HAL_CAN_ConfigFilter(&hcan1, &sFilterConfig) != HAL_OK)
//   {
//    // Filter configuration Error
//    Error_Handler();
//   }
//  }
遇到的问题是 CAN 控制器仅启用 “for loop” 中调用的最后一个 filter-bank 配置,其他的 filter-bank没有启用


公羊子丹 发表于 2025-5-27 07:40 | 显示全部楼层
我看你是用循环配置多个 filter-bank,但结果只有最后一个生效,感觉是前面的都被覆盖了,可能 HAL_CAN_ConfigFilter 每次都会重置配置。
周半梅 发表于 2025-5-27 07:41 | 显示全部楼层
STM32 的 HAL 库配置 CAN filter 的时候,有时候会自动覆盖之前的 filter 设置,建议试试分开配置或者调试 HAL 源码确认下。
帛灿灿 发表于 2025-5-27 07:42 | 显示全部楼层
你在每次调用 HAL_CAN_ConfigFilter 前有没有重新设置 FilterActivation = ENABLE?有时候如果中间被重置了也会失效。
童雨竹 发表于 2025-5-27 07:42 | 显示全部楼层
注意 SlaveStartFilterBank 参数每次都设置为 14,会不会影响前面的 filter?如果只用了 CAN1,建议这个值设为默认或不动试试。
万图 发表于 2025-5-27 07:43 | 显示全部楼层
我用 STM32F4 系列时也碰到类似问题,后来把所有 filter 统一成 32 位 mask 模式反而一切正常了。
Wordsworth 发表于 2025-5-27 07:44 | 显示全部楼层
HAL 层对 CAN filter 的封装比较死板,可以考虑自己直接改寄存器,绕开 HAL。
Bblythe 发表于 2025-5-27 07:45 | 显示全部楼层
如果你在调用 HAL_CAN_Start 之前配置滤波器,那就没问题;如果是在 Start 之后调用,filter 可能不会生效。
Pulitzer 发表于 2025-5-27 07:45 | 显示全部楼层
建议在每次调用 HAL_CAN_ConfigFilter 后打印 HAL 的返回值,确认每一次都配置成功了。
Uriah 发表于 2025-5-27 07:46 | 显示全部楼层
你是不是用了 CAN1 和 CAN2?如果用了双 CAN 控制器,要注意 filter bank 的分配和交叉限制。
Clyde011 发表于 2025-5-27 07:47 | 显示全部楼层
建议你在循环外加一个 HAL_CAN_Stop,循环配置所有 filter 后再统一 HAL_CAN_Start,有时候 CAN 控制器启用状态会影响滤波器加载。
t60yz 发表于 2025-5-31 23:41 | 显示全部楼层
你不需要每次都设置SlaveStartFilterBank
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

39

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

39

主题

39

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部