aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2025-05-28 14:55:21 -0400
committerKevin O'Connor <kevin@koconnor.net>2025-05-30 15:15:13 -0400
commitde182b1d144accfbb43c46bcda38a761f13f0f96 (patch)
tree741b8175bb03c6080d5f971898c73636e0f8eb9c
parentf5956b539557a9937115c3bed1ad7dc8769db3d4 (diff)
downloadkutter-de182b1d144accfbb43c46bcda38a761f13f0f96.tar.gz
kutter-de182b1d144accfbb43c46bcda38a761f13f0f96.tar.xz
kutter-de182b1d144accfbb43c46bcda38a761f13f0f96.zip
stm32: Support using CANBUS on PB5/PB6 on stm32h7 chips
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r--src/stm32/Kconfig4
-rw-r--r--src/stm32/stm32h7.c4
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;