WHALEE 发表于 2025-4-21 10:00

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



用 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;//   sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;//   sFilterConfig.FilterIdHigh = CAN1_ID_HiWord;//   sFilterConfig.FilterIdLow = CAN1_ID_LoWord;//   sFilterConfig.FilterMaskIdHigh = CAN1_FilterMaskHiWord;//   sFilterConfig.FilterMaskIdLow = CAN1_FilterMaskLoWord;//   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
页: [1]
查看完整版本: CAN 控制器仅能启用一个 filter-bank 配置