From e73637af24b14c492c62a1b5865df5e6563ce976 Mon Sep 17 00:00:00 2001 From: Alexander Wachter Date: Thu, 3 May 2018 11:04:12 +0200 Subject: [PATCH] boards: stm: Add CAN support for stm32f072b micro controller This commit adds the can device to the stm32f072b device tree and pinmux Signed-off-by: Alexander Wachter --- arch/arm/soc/st_stm32/stm32f0/dts.fixup | 6 ++++++ boards/arm/stm32f072b_disco/pinmux.c | 5 +++++ boards/arm/stm32f072b_disco/stm32f072b_disco.dts | 7 +++++++ drivers/pinmux/stm32/pinmux_stm32f0.h | 9 +++++++++ dts/arm/st/stm32f0-pinctrl.dtsi | 12 ++++++++++++ dts/arm/st/stm32f072.dtsi | 10 ++++++++++ 6 files changed, 49 insertions(+) diff --git a/arch/arm/soc/st_stm32/stm32f0/dts.fixup b/arch/arm/soc/st_stm32/stm32f0/dts.fixup index 1cc751c34f8..4c9947d2b8f 100644 --- a/arch/arm/soc/st_stm32/stm32f0/dts.fixup +++ b/arch/arm/soc/st_stm32/stm32f0/dts.fixup @@ -36,6 +36,12 @@ #define CONFIG_SPI_2_NAME ST_STM32_SPI_FIFO_40003800_LABEL #define CONFIG_SPI_2_IRQ ST_STM32_SPI_FIFO_40003800_IRQ_0 +#define CONFIG_CAN_1_BASE_ADDRESS ST_STM32_CAN_40006400_BASE_ADDRESS +#define CONFIG_CAN_1_BUS_SPEED ST_STM32_CAN_40006400_BUS_SPEED +#define CONFIG_CAN_1_NAME ST_STM32_CAN_40006400_LABEL +#define CONFIG_CAN_1_IRQ ST_STM32_CAN_40006400_IRQ_0 +#define CONFIG_CAN_1_IRQ_PRIORITY ST_STM32_CAN_40006400_IRQ_0_PRIORITY + #define FLASH_DEV_BASE_ADDRESS ST_STM32F0_FLASH_CONTROLLER_40022000_BASE_ADDRESS #define FLASH_DEV_NAME ST_STM32F0_FLASH_CONTROLLER_40022000_LABEL diff --git a/boards/arm/stm32f072b_disco/pinmux.c b/boards/arm/stm32f072b_disco/pinmux.c index e9e8f6846ed..116287f201e 100644 --- a/boards/arm/stm32f072b_disco/pinmux.c +++ b/boards/arm/stm32f072b_disco/pinmux.c @@ -32,6 +32,11 @@ static const struct pin_config pinconf[] = { {STM32_PIN_PB4, STM32F0_PINMUX_FUNC_PB4_SPI1_MISO}, {STM32_PIN_PB5, STM32F0_PINMUX_FUNC_PB5_SPI1_MOSI}, #endif /* CONFIG_SPI_1 */ +#ifdef CONFIG_CAN_1 + {STM32_PIN_PB8, STM32F0_PINMUX_FUNC_PB8_CAN_RX}, + {STM32_PIN_PB9, STM32F0_PINMUX_FUNC_PB9_CAN_TX}, +#endif /* CONFIG_CAN_1 */ + }; static int pinmux_stm32_init(struct device *port) diff --git a/boards/arm/stm32f072b_disco/stm32f072b_disco.dts b/boards/arm/stm32f072b_disco/stm32f072b_disco.dts index ff2453a331c..2d9aa3fb8e8 100644 --- a/boards/arm/stm32f072b_disco/stm32f072b_disco.dts +++ b/boards/arm/stm32f072b_disco/stm32f072b_disco.dts @@ -74,3 +74,10 @@ &spi1 { status = "ok"; }; + +&can1 { + pinctrl-0 = <&can_pins_a>; + pinctrl-names = "default"; + bus-speed = <250000>; + status = "ok"; +}; diff --git a/drivers/pinmux/stm32/pinmux_stm32f0.h b/drivers/pinmux/stm32/pinmux_stm32f0.h index a447cfad3aa..f69706ed83d 100644 --- a/drivers/pinmux/stm32/pinmux_stm32f0.h +++ b/drivers/pinmux/stm32/pinmux_stm32f0.h @@ -88,4 +88,13 @@ #define STM32F0_PINMUX_FUNC_PC3_SPI2_MOSI \ (STM32_PINMUX_ALT_FUNC_0 | STM32_PUSHPULL_NOPULL) +#define STM32F0_PINMUX_FUNC_PB8_CAN_RX \ + (STM32_PINMUX_ALT_FUNC_4 | STM32_PUSHPULL_NOPULL) +#define STM32F0_PINMUX_FUNC_PB9_CAN_TX \ + (STM32_PINMUX_ALT_FUNC_4 | STM32_PUSHPULL_NOPULL) +#define STM32F0_PINMUX_FUNC_PD0_CAN_RX \ + (STM32_PINMUX_ALT_FUNC_0 | STM32_PUPDR_PULL_UP) +#define STM32F0_PINMUX_FUNC_PD1_CAN_TX \ + (STM32_PINMUX_ALT_FUNC_0 | STM32_PUSHPULL_NOPULL) + #endif /* _STM32F0_PINMUX_H_ */ diff --git a/dts/arm/st/stm32f0-pinctrl.dtsi b/dts/arm/st/stm32f0-pinctrl.dtsi index 1631e088992..111269200b3 100644 --- a/dts/arm/st/stm32f0-pinctrl.dtsi +++ b/dts/arm/st/stm32f0-pinctrl.dtsi @@ -39,6 +39,18 @@ tx = ; }; }; + can_pins_a: can@0 { + rx_tx { + rx = ; + tx = ; + }; + }; + can_pins_b: can@1 { + rx_tx { + rx = ; + tx = ; + }; + }; }; }; }; diff --git a/dts/arm/st/stm32f072.dtsi b/dts/arm/st/stm32f072.dtsi index d17754c878c..ce3c3441da2 100644 --- a/dts/arm/st/stm32f072.dtsi +++ b/dts/arm/st/stm32f072.dtsi @@ -42,5 +42,15 @@ status = "disabled"; label= "USB"; }; + + can1: can@40006400 { + compatible = "st,stm32-can"; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x40006400 0x400>; + interrupts = <30 0>; + status = "disabled"; + label = "CAN_1"; + }; }; };