STM32L552 CANFD过滤器配置异常:无法接收指定ID报文
检查过滤器模式与掩码设置
若使用标识符列表模式,需确保每个过滤器的掩码寄存器设为全1(0xFFFF),只有掩码全1时才会精确匹配目标ID。如果10、100对应的过滤器掩码未正确设置,会导致无法匹配接收。示例配置:sFilterConfig.FilterMaskIdHigh = 0xFFFF; sFilterConfig.FilterMaskIdLow = 0xFFFF;确认过滤器组的FIFO分配
STM32L5的CAN过滤器可分配给FIFO0或FIFO1,需保证4个目标ID对应的过滤器都分配到你正在监听的FIFO(比如FilterFIFOAssignment = CAN_FILTER_FIFO0),否则对应FIFO无法接收到匹配报文。检查过滤器激活状态与数量配置
每个过滤器配置后必须开启激活(FilterActivation = ENABLE),且调用HAL_CAN_ConfigFilter()写入硬件。另外注意:双过滤器模式下,单个32位过滤器寄存器可存储2个16位标准ID,因此4个标准ID仅需配置2个过滤器,而非4个。若你设置StdFiltersNbr = 4,硬件可能无法正确识别超出的过滤器配置,这很可能是核心问题。标准ID的位对齐验证
标准CAN ID为11位,写入寄存器时需左移5位(对应寄存器bit15-5存储ID的bit10-0)。比如ID10(0x0A)需转换为0x0A << 5 = 0x140后写入FilterIdHigh,直接写入原始ID会导致位对齐错误,无法匹配。确认初始化顺序
需按HAL_CAN_Init()→ 过滤器配置 →HAL_CAN_Start()的顺序执行,若先启动CAN再配置过滤器,硬件不会加载新的过滤规则。
内容的提问来源于stack exchange,提问作者genicki

