From de182b1d144accfbb43c46bcda38a761f13f0f96 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Wed, 28 May 2025 14:55:21 -0400 Subject: [PATCH] stm32: Support using CANBUS on PB5/PB6 on stm32h7 chips Signed-off-by: Kevin O'Connor --- src/stm32/Kconfig | 4 ++-- src/stm32/stm32h7.c | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/stm32/Kconfig b/src/stm32/Kconfig index e78fda5e..0c240bb2 100644 --- a/src/stm32/Kconfig +++ b/src/stm32/Kconfig @@ -463,7 +463,7 @@ choice select CANSERIAL config STM32_MMENU_CANBUS_PB5_PB6 bool "CAN bus (on PB5/PB6)" if LOW_LEVEL_OPTIONS - depends on (MACH_STM32F4 && HAVE_STM32_CANBUS) + depends on (MACH_STM32F4 && HAVE_STM32_CANBUS) || MACH_STM32H7 select CANSERIAL config STM32_MMENU_CANBUS_PB12_PB13 bool "CAN bus (on PB12/PB13)" if LOW_LEVEL_OPTIONS @@ -503,7 +503,7 @@ choice depends on (MACH_STM32F4 && HAVE_STM32_CANBUS) config STM32_CMENU_CANBUS_PB5_PB6 bool "CAN bus (on PB5/PB6)" - depends on (MACH_STM32F4 && HAVE_STM32_CANBUS) || MACH_STM32G0B1 + depends on (MACH_STM32F4 && HAVE_STM32_CANBUS) || MACH_STM32H7 || MACH_STM32G0B1 config STM32_CMENU_CANBUS_PB12_PB13 bool "CAN bus (on PB12/PB13)" depends on (MACH_STM32F4 && HAVE_STM32_CANBUS) || HAVE_STM32_FDCANBUS diff --git a/src/stm32/stm32h7.c b/src/stm32/stm32h7.c index 74732624..f65eeed7 100644 --- a/src/stm32/stm32h7.c +++ b/src/stm32/stm32h7.c @@ -49,6 +49,10 @@ lookup_clock_line(uint32_t periph_base) uint32_t bit = 1 << ((periph_base - D2_APB2PERIPH_BASE) / 0x400); return (struct cline){.en=&RCC->APB2ENR, .rst=&RCC->APB2RSTR, .bit=bit}; } else { + if (periph_base == FDCAN2_BASE) + // FDCAN1 and FDCAN2 share same clock enable + return (struct cline){.en=&RCC->APB1HENR, .rst=&RCC->APB1HRSTR, + .bit = RCC_APB1HENR_FDCANEN}; uint32_t offset = ((periph_base - D2_APB1PERIPH_BASE) / 0x400); if (offset < 32) { uint32_t bit = 1 << offset;