From 0bc87c359f33f4fefa7b2e34fa1cf9b2751083d9 Mon Sep 17 00:00:00 2001 From: wdfk-prog <1425075683@qq.com> Date: Sun, 4 Jan 2026 16:03:58 +0800 Subject: [PATCH] feat:[stm32][can]: Validate CAN filter bank settings and skip invalid items --- bsp/stm32/libraries/HAL_Drivers/drivers/drv_can.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/bsp/stm32/libraries/HAL_Drivers/drivers/drv_can.c b/bsp/stm32/libraries/HAL_Drivers/drivers/drv_can.c index e40532ab225..72d89316b25 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drivers/drv_can.c +++ b/bsp/stm32/libraries/HAL_Drivers/drivers/drv_can.c @@ -330,6 +330,10 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg) else { filter_cfg = (struct rt_can_filter_config *)arg; + if (!IS_CAN_FILTER_BANK_DUAL(drv_can->FilterConfig.SlaveStartFilterBank)) + { + LOG_W("can%s invalid SlaveStartFilterBank=%d", drv_can->name, drv_can->FilterConfig.SlaveStartFilterBank); + } /* get default filter */ for (int i = 0; i < filter_cfg->count; i++) { @@ -351,6 +355,11 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg) { /* use user-defined filter bank settings */ drv_can->FilterConfig.FilterBank = filter_cfg->items[i].hdr_bank; + } + if (!IS_CAN_FILTER_BANK_DUAL(drv_can->FilterConfig.FilterBank)) + { + LOG_W("can%s invalid FilterBank=%d, skip item %d", drv_can->name, drv_can->FilterConfig.FilterBank, i); + continue; } /** * ID | CAN_FxR1[31:24] | CAN_FxR1[23:16] | CAN_FxR1[15:8] | CAN_FxR1[7:0] |