From ff36a39d32a73e17b1b657d9f47fcd0b9850074a Mon Sep 17 00:00:00 2001 From: zuozuojia <2674928186@qq.com> Date: Fri, 7 Jan 2022 22:35:58 +0800 Subject: [PATCH] [bsp/stm32] fix the bug of can filter conflict --- bsp/stm32/libraries/HAL_Drivers/drv_can.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_can.c b/bsp/stm32/libraries/HAL_Drivers/drv_can.c index e1b22eb3ac..b59f33348f 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_can.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_can.c @@ -335,10 +335,25 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg) { if (filter_cfg->items[i].hdr == -1) { - drv_can->FilterConfig.FilterBank = i; + /* use default filter bank settings */ + /** + * because can1 and can2 use the same filter groups, + * separate the groups of can1 and can2, to prevent being covered. + */ + if (drv_can->name == "can1") + { + /* can1 banks 0~13 */ + drv_can->FilterConfig.FilterBank = i; + } + else if (drv_can->name == "can2") + { + /* can1 banks 14~27 */ + drv_can->FilterConfig.FilterBank = i + 14; + } } else { + /* use user-defined filter bank settings */ drv_can->FilterConfig.FilterBank = filter_cfg->items[i].hdr; } /**