打印
[STM32F4]

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

[复制链接]
349|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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?有时候如果中间被重置了也会失效。

使用特权

评论回复
5
童雨竹| | 2025-5-27 07:42 | 只看该作者
注意 SlaveStartFilterBank 参数每次都设置为 14,会不会影响前面的 filter?如果只用了 CAN1,建议这个值设为默认或不动试试。

使用特权

评论回复
6
万图| | 2025-5-27 07:43 | 只看该作者
我用 STM32F4 系列时也碰到类似问题,后来把所有 filter 统一成 32 位 mask 模式反而一切正常了。

使用特权

评论回复
7
Wordsworth| | 2025-5-27 07:44 | 只看该作者
HAL 层对 CAN filter 的封装比较死板,可以考虑自己直接改寄存器,绕开 HAL。

使用特权

评论回复
8
Bblythe| | 2025-5-27 07:45 | 只看该作者
如果你在调用 HAL_CAN_Start 之前配置滤波器,那就没问题;如果是在 Start 之后调用,filter 可能不会生效。

使用特权

评论回复
9
Pulitzer| | 2025-5-27 07:45 | 只看该作者
建议在每次调用 HAL_CAN_ConfigFilter 后打印 HAL 的返回值,确认每一次都配置成功了。

使用特权

评论回复
10
Uriah| | 2025-5-27 07:46 | 只看该作者
你是不是用了 CAN1 和 CAN2?如果用了双 CAN 控制器,要注意 filter bank 的分配和交叉限制。

使用特权

评论回复
11
Clyde011| | 2025-5-27 07:47 | 只看该作者
建议你在循环外加一个 HAL_CAN_Stop,循环配置所有 filter 后再统一 HAL_CAN_Start,有时候 CAN 控制器启用状态会影响滤波器加载。

使用特权

评论回复
12
t60yz| | 2025-5-31 23:41 | 只看该作者
你不需要每次都设置SlaveStartFilterBank

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

16

帖子

0

粉丝