summaryrefslogtreecommitdiff
path: root/bsp
diff options
context:
space:
mode:
authorzuozuojia <[email protected]>2022-01-07 22:35:58 +0800
committerguo <[email protected]>2022-04-14 11:50:22 +0800
commitff36a39d32a73e17b1b657d9f47fcd0b9850074a (patch)
tree9bd07cef6ed393f6c3d4c90ee8aff9b4f9316f50 /bsp
parent8af8decb620608e4be2c0c87c0245ed89fb0fa8d (diff)
[bsp/stm32] fix the bug of can filter conflict
Diffstat (limited to 'bsp')
-rw-r--r--bsp/stm32/libraries/HAL_Drivers/drv_can.c17
1 files changed, 16 insertions, 1 deletions
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;
}
/**