From 6ad6385a70e069dd6d7cc6678ca9eb1ae00806c2 Mon Sep 17 00:00:00 2001 From: IBEN EL HADJ MESSAOUD Marwa Date: Mon, 22 Jul 2024 16:00:15 +0200 Subject: [PATCH 01/10] west.yml: hal_stm32: Add STM32Cube package of the familly stm32u0 Add STM32U0 pinctrl.dtsi and HAL-LL files Signed-off-by: IBEN EL HADJ MESSAOUD Marwa --- west.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/west.yml b/west.yml index 3bca2089ba0ec5..8dcf8861d848d3 100644 --- a/west.yml +++ b/west.yml @@ -234,7 +234,7 @@ manifest: groups: - hal - name: hal_stm32 - revision: f1317150eac951fdd8259337a47cbbc4c2e6d335 + revision: 484af4f994737bef9e6ccc3e267cc319b85da332 path: modules/hal/stm32 groups: - hal From 042c4c974b6dc6b269b998e11dc7d758387cd484 Mon Sep 17 00:00:00 2001 From: IBEN EL HADJ MESSAOUD Marwa Date: Mon, 22 Jul 2024 14:58:12 +0200 Subject: [PATCH 02/10] dts: arm: st: add stm32u0 support Provide support for the familly STM32U0 and ST32U083 Signed-off-by: IBEN EL HADJ MESSAOUD Marwa --- dts/arm/st/u0/stm32u0.dtsi | 215 +++++++++++++++++++++++++++++++++ dts/arm/st/u0/stm32u083.dtsi | 13 ++ dts/arm/st/u0/stm32u083Xc.dtsi | 30 +++++ 3 files changed, 258 insertions(+) create mode 100644 dts/arm/st/u0/stm32u0.dtsi create mode 100644 dts/arm/st/u0/stm32u083.dtsi create mode 100644 dts/arm/st/u0/stm32u083Xc.dtsi diff --git a/dts/arm/st/u0/stm32u0.dtsi b/dts/arm/st/u0/stm32u0.dtsi new file mode 100644 index 00000000000000..1f594a0b616c33 --- /dev/null +++ b/dts/arm/st/u0/stm32u0.dtsi @@ -0,0 +1,215 @@ +/* + * Copyright (c) 2024 STMicroelectronics + * + * SPDX-License-Identifier: Apache-2.0 + */ + + +#include +#include +#include +#include +#include + +/ { + chosen { + zephyr,flash-controller = &flash; + }; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu0: cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-m0+"; + reg = <0>; + #address-cells = <1>; + #size-cells = <1>; + }; + }; + + sram0: memory@20000000 { + compatible = "mmio-sram"; + }; + + clocks { + clk_hse: clk-hse { + #clock-cells = <0>; + compatible = "st,stm32-hse-clock"; + status = "disabled"; + }; + + clk_hsi: clk-hsi { + #clock-cells = <0>; + compatible = "fixed-clock"; + clock-frequency = ; + status = "disabled"; + }; + + clk_hsi48: clk-hsi48 { + #clock-cells = <0>; + compatible = "fixed-clock"; + clock-frequency = ; + status = "disabled"; + }; + + clk_msi: clk-msi { + #clock-cells = <0>; + compatible = "st,stm32-msi-clock"; + msi-range = <4>; /* 4MHz (reset value) */ + status = "disabled"; + }; + + clk_lse: clk-lse { + #clock-cells = <0>; + compatible = "st,stm32-lse-clock"; + clock-frequency = <32768>; + driving-capability = <2>; + status = "disabled"; + }; + + clk_lsi: clk-lsi { + #clock-cells = <0>; + compatible = "fixed-clock"; + clock-frequency = ; + status = "disabled"; + }; + + pll: pll { + #clock-cells = <0>; + compatible = "st,stm32u0-pll-clock"; + status = "disabled"; + }; + }; + + soc { + flash: flash-controller@40022000 { + compatible = "st,stm32-flash-controller", "st,stm32g0-flash-controller"; + reg = <0x40022000 0x400>; + interrupts = <3 0>; + + #address-cells = <1>; + #size-cells = <1>; + + flash0: flash@8000000 { + compatible = "st,stm32-nv-flash", "soc-nv-flash"; + + write-block-size = <8>; + erase-block-size = <2048>; + /* maximum erase time(ms) for a 2K sector */ + max-erase-time = <40>; + }; + }; + + rcc: rcc@40021000 { + compatible = "st,stm32f0-rcc"; + clocks-controller; + #clock-cells = <2>; + reg = <0x40021000 0x400>; + + rctl: reset-controller { + compatible = "st,stm32-rcc-rctl"; + #reset-cells = <1>; + }; + }; + + exti: interrupt-controller@40021800 { + compatible = "st,stm32g0-exti","st,stm32-exti"; + interrupt-controller; + #interrupt-cells = <1>; + #address-cells = <1>; + reg = <0x40021800 0x400>; + num-lines = <16>; + interrupts = <5 0>, <6 0>, <7 0>; + interrupt-names = "line0-1", "line2-3", "line4-15"; + line-ranges = <0 2>, <2 2>, <4 12>; + }; + + pinctrl: pin-controller@50000000 { + compatible = "st,stm32-pinctrl"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0x50000000 0x2000>; + + gpioa: gpio@50000000 { + compatible = "st,stm32-gpio"; + gpio-controller; + #gpio-cells = <2>; + reg = <0x50000000 0x400>; + clocks = <&rcc STM32_CLOCK_BUS_IOP 0x00000001>; + }; + + gpiob: gpio@50000400 { + compatible = "st,stm32-gpio"; + gpio-controller; + #gpio-cells = <2>; + reg = <0x50000400 0x400>; + clocks = <&rcc STM32_CLOCK_BUS_IOP 0x00000002>; + }; + + gpioc: gpio@50000800 { + compatible = "st,stm32-gpio"; + gpio-controller; + #gpio-cells = <2>; + reg = <0x50000800 0x400>; + clocks = <&rcc STM32_CLOCK_BUS_IOP 0x00000004>; + }; + + gpiod: gpio@50000C00 { + compatible = "st,stm32-gpio"; + gpio-controller; + #gpio-cells = <2>; + reg = <0x50000C00 0x400>; + clocks = <&rcc STM32_CLOCK_BUS_IOP 0x00000008>; + }; + + gpioe: gpio@50001000 { + compatible = "st,stm32-gpio"; + gpio-controller; + #gpio-cells = <2>; + reg = <0x50001000 0x400>; + clocks = <&rcc STM32_CLOCK_BUS_IOP 0x00000010>; + }; + + gpiof: gpio@50001400 { + compatible = "st,stm32-gpio"; + gpio-controller; + #gpio-cells = <2>; + reg = <0x50001400 0x400>; + clocks = <&rcc STM32_CLOCK_BUS_IOP 0x00000020>; + }; + }; + + usart1: serial@40013800 { + compatible = "st,stm32-usart", "st,stm32-uart"; + reg = <0x40013800 0x400>; + clocks = <&rcc STM32_CLOCK_BUS_APB1_2 0x00004000>; + resets = <&rctl STM32_RESET(APB1H, 14U)>; + interrupts = <27 0>; + status = "disabled"; + }; + + usart2: serial@40004400 { + compatible = "st,stm32-usart", "st,stm32-uart"; + reg = <0x40004400 0x400>; + clocks = <&rcc STM32_CLOCK_BUS_APB1 0x00020000>; + resets = <&rctl STM32_RESET(APB1L, 17U)>; + interrupts = <28 0>; + status = "disabled"; + }; + + usart3: serial@40004800 { + compatible = "st,stm32-usart", "st,stm32-uart"; + reg = <0x40004800 0x400>; + clocks = <&rcc STM32_CLOCK_BUS_APB1 0x00040000>; + resets = <&rctl STM32_RESET(APB1L, 18U)>; + interrupts = <29 0>; + status = "disabled"; + }; + }; +}; + +&nvic { + arm,num-irq-priority-bits = <2>; +}; diff --git a/dts/arm/st/u0/stm32u083.dtsi b/dts/arm/st/u0/stm32u083.dtsi new file mode 100644 index 00000000000000..b3a85e75195be5 --- /dev/null +++ b/dts/arm/st/u0/stm32u083.dtsi @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2024 STMicroelectronics + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + soc { + compatible = "st,stm32u083", "st,stm32u0", "simple-bus"; + }; +}; diff --git a/dts/arm/st/u0/stm32u083Xc.dtsi b/dts/arm/st/u0/stm32u083Xc.dtsi new file mode 100644 index 00000000000000..0a3a59e177ff44 --- /dev/null +++ b/dts/arm/st/u0/stm32u083Xc.dtsi @@ -0,0 +1,30 @@ + +/* + * Copyright (c) 2024 STMicroelectronics + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include +#include + +/ { + sram1: memory@20000000 { + compatible = "zephyr,memory-region", "mmio-sram"; + reg = <0x20000000 DT_SIZE_K(32)>; + zephyr,memory-region = "SRAM1"; + }; + + sram2: memory@20008000 { + compatible = "zephyr,memory-region", "mmio-sram"; + reg = <0x20008000 DT_SIZE_K(8)>; + zephyr,memory-region = "SRAM2"; + }; + + soc { + flash-controller@40022000 { + flash0: flash@8000000 { + reg = <0x08000000 DT_SIZE_K(256)>; + }; + }; + }; +}; From d50a5ddc52441655a39536347857ce9628fc5144 Mon Sep 17 00:00:00 2001 From: IBEN EL HADJ MESSAOUD Marwa Date: Mon, 22 Jul 2024 15:03:01 +0200 Subject: [PATCH 03/10] include: zephyr: Add the stm32u0 clock control and the reset register Add the stm32u0 clock control and the RCC bus reset register offset Signed-off-by: IBEN EL HADJ MESSAOUD Marwa --- .../clock_control/stm32_clock_control.h | 3 + .../zephyr/dt-bindings/clock/stm32u0_clock.h | 92 +++++++++++++++++++ .../zephyr/dt-bindings/reset/stm32u0_reset.h | 18 ++++ 3 files changed, 113 insertions(+) create mode 100644 include/zephyr/dt-bindings/clock/stm32u0_clock.h create mode 100644 include/zephyr/dt-bindings/reset/stm32u0_reset.h diff --git a/include/zephyr/drivers/clock_control/stm32_clock_control.h b/include/zephyr/drivers/clock_control/stm32_clock_control.h index a9ce911e5c7f06..262c7f940ac644 100644 --- a/include/zephyr/drivers/clock_control/stm32_clock_control.h +++ b/include/zephyr/drivers/clock_control/stm32_clock_control.h @@ -46,6 +46,8 @@ #include #elif defined(CONFIG_SOC_SERIES_STM32H7RSX) #include +#elif defined(CONFIG_SOC_SERIES_STM32U0X) +#include #elif defined(CONFIG_SOC_SERIES_STM32U5X) #include #elif defined(CONFIG_SOC_SERIES_STM32WBAX) @@ -142,6 +144,7 @@ DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32g0_pll_clock, okay) || \ DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32g4_pll_clock, okay) || \ DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32l4_pll_clock, okay) || \ + DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32u0_pll_clock, okay) || \ DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32u5_pll_clock, okay) || \ DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32wb_pll_clock, okay) || \ DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(pll), st_stm32wba_pll_clock, okay) || \ diff --git a/include/zephyr/dt-bindings/clock/stm32u0_clock.h b/include/zephyr/dt-bindings/clock/stm32u0_clock.h new file mode 100644 index 00000000000000..4dfd1b3a0f3354 --- /dev/null +++ b/include/zephyr/dt-bindings/clock/stm32u0_clock.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2024 STMicroelectronics + * + * SPDX-License-Identifier: Apache-2.0 + */ +#ifndef ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_STM32U0_CLOCK_H_ +#define ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_STM32U0_CLOCK_H_ + +#include "stm32_common_clocks.h" + +/** Bus gatting clocks */ +#define STM32_CLOCK_BUS_IOP 0x4C +#define STM32_CLOCK_BUS_AHB1 0x48 +#define STM32_CLOCK_BUS_APB1 0x58 +#define STM32_CLOCK_BUS_APB1_2 0x60 + +#define STM32_PERIPH_BUS_MIN STM32_CLOCK_BUS_IOP +#define STM32_PERIPH_BUS_MAX STM32_CLOCK_BUS_APB1_2 + +/** Domain clocks */ +/* RM0503, clock configuration register (RCC_CCIPR) */ + +/** System clock */ +/* defined in stm32_common_clocks.h */ + +/** Fixed clocks */ +/* Low speed clocks defined in stm32_common_clocks.h */ +#define STM32_SRC_HSI (STM32_SRC_LSI + 1) +#define STM32_SRC_HSI48 (STM32_SRC_HSI + 1) +#define STM32_SRC_MSI (STM32_SRC_HSI48 + 1) +#define STM32_SRC_HSE (STM32_SRC_MSI + 1) +/** Peripheral bus clock */ +#define STM32_SRC_PCLK (STM32_SRC_HSE + 1) +/** PLL clock outputs */ +#define STM32_SRC_PLL_P (STM32_SRC_PCLK + 1) +#define STM32_SRC_PLL_Q (STM32_SRC_PLL_P + 1) +#define STM32_SRC_PLL_R (STM32_SRC_PLL_Q + 1) + +#define STM32_CLOCK_REG_MASK 0xFFU +#define STM32_CLOCK_REG_SHIFT 0U +#define STM32_CLOCK_SHIFT_MASK 0x1FU +#define STM32_CLOCK_SHIFT_SHIFT 8U +#define STM32_CLOCK_MASK_MASK 0x7U +#define STM32_CLOCK_MASK_SHIFT 13U +#define STM32_CLOCK_VAL_MASK 0x7U +#define STM32_CLOCK_VAL_SHIFT 16U + +/** + * @brief STM32 clock configuration bit field. + * + * - reg (1/2/3) [ 0 : 7 ] + * - shift (0..31) [ 8 : 12 ] + * - mask (0x1, 0x3, 0x7) [ 13 : 15 ] + * - val (0..7) [ 16 : 18 ] + * + * @param reg RCC_CCIPRx register offset + * @param shift Position within RCC_CCIPRx. + * @param mask Mask for the RCC_CCIPRx field. + * @param val Clock value (0, 1, ... 7). + */ +#define STM32_CLOCK(val, mask, shift, reg) \ + ((((reg) & STM32_CLOCK_REG_MASK) << STM32_CLOCK_REG_SHIFT) | \ + (((shift) & STM32_CLOCK_SHIFT_MASK) << STM32_CLOCK_SHIFT_SHIFT) | \ + (((mask) & STM32_CLOCK_MASK_MASK) << STM32_CLOCK_MASK_SHIFT) | \ + (((val) & STM32_CLOCK_VAL_MASK) << STM32_CLOCK_VAL_SHIFT)) + +/** @brief RCC_CCIPR register offset */ +#define CCIPR_REG 0x88 + +/** @brief RCC_BDCR register offset */ +#define BDCR_REG 0x90 + +/** @brief Device domain clocks selection helpers */ +/** CCIPR devices */ +#define USART1_SEL(val) STM32_CLOCK(val, 3, 0, CCIPR_REG) +#define USART2_SEL(val) STM32_CLOCK(val, 3, 2, CCIPR_REG) +#define LPUART3_SEL(val) STM32_CLOCK(val, 3, 6, CCIPR_REG) +#define LPUART2_SEL(val) STM32_CLOCK(val, 3, 8, CCIPR_REG) +#define LPUART1_SEL(val) STM32_CLOCK(val, 3, 10, CCIPR_REG) +#define I2C1_SEL(val) STM32_CLOCK(val, 3, 12, CCIPR_REG) +#define I2C3_SEL(val) STM32_CLOCK(val, 3, 16, CCIPR_REG) +#define LPTIM1_SEL(val) STM32_CLOCK(val, 3, 18, CCIPR_REG) +#define LPTIM2_SEL(val) STM32_CLOCK(val, 3, 20, CCIPR_REG) +#define LPTIM3_SEL(val) STM32_CLOCK(val, 3, 22, CCIPR_REG) +#define TIM1_SEL(val) STM32_CLOCK(val, 1, 24, CCIPR_REG) +#define TIM15_SEL(val) STM32_CLOCK(val, 1, 25, CCIPR_REG) +#define CLK48_SEL(val) STM32_CLOCK(val, 3, 26, CCIPR_REG) +#define ADC_SEL(val) STM32_CLOCK(val, 3, 28, CCIPR_REG) +/** BDCR devices */ +#define RTC_SEL(val) STM32_CLOCK(val, 3, 8, CSR_REG) + +#endif /* ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_STM32U0_CLOCK_H_ */ diff --git a/include/zephyr/dt-bindings/reset/stm32u0_reset.h b/include/zephyr/dt-bindings/reset/stm32u0_reset.h new file mode 100644 index 00000000000000..424f836a706859 --- /dev/null +++ b/include/zephyr/dt-bindings/reset/stm32u0_reset.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2024 STMicroelectronics + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef ZEPHYR_INCLUDE_DT_BINDINGS_RESET_STM32U0_RESET_H_ +#define ZEPHYR_INCLUDE_DT_BINDINGS_RESET_STM32U0_RESET_H_ + +#include "stm32-common.h" + +/* RCC bus reset register offset */ +#define STM32_RESET_BUS_IOP 0x2C +#define STM32_RESET_BUS_AHB1 0x28 +#define STM32_RESET_BUS_APB1L 0x38 +#define STM32_RESET_BUS_APB1H 0x40 + +#endif /* ZEPHYR_INCLUDE_DT_BINDINGS_RESET_STM32U0_RESET_H_ */ From b284ed2ef00b9c5d53b853887381313599dfb294 Mon Sep 17 00:00:00 2001 From: IBEN EL HADJ MESSAOUD Marwa Date: Mon, 22 Jul 2024 15:08:07 +0200 Subject: [PATCH 04/10] dts: bindings: clock: Add binding for stm32u0 Add binding "st,stm32u0-pll-clock" for U0 clocks. Signed-off-by: IBEN EL HADJ MESSAOUD Marwa --- dts/bindings/clock/st,stm32u0-pll-clock.yaml | 65 ++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 dts/bindings/clock/st,stm32u0-pll-clock.yaml diff --git a/dts/bindings/clock/st,stm32u0-pll-clock.yaml b/dts/bindings/clock/st,stm32u0-pll-clock.yaml new file mode 100644 index 00000000000000..73d9d6f7324d52 --- /dev/null +++ b/dts/bindings/clock/st,stm32u0-pll-clock.yaml @@ -0,0 +1,65 @@ +# Copyright (c) 2024 STMicroelectronics +# SPDX-License-Identifier: Apache-2.0 + +description: | + STM32U0 Main PLL node binding: + + Takes one of clk_hse, clk_hsi or clk_msi as input clock, with + an input frequency from 2.66 to 16 MHz. PLLM factor is used to set the input + clock in this acceptable range. + + PLL can have up to 3 output clocks and for each output clock, the + frequency can be computed with the following formulae: + + f(PLL_P) = f(VCO clock) / PLLP --> to ADC + f(PLL_Q) = f(VCO clock) / PLLQ --> to RNG + f(PLL_R) = f(VCO clock) / PLLR --> PLLCLK (System Clock) + + with f(VCO clock) = f(PLL clock input) × (PLLN / PLLM) + + The PLL output frequency must not exceed 122 MHz. + +compatible: "st,stm32u0-pll-clock" + +include: [clock-controller.yaml, base.yaml] + +properties: + "#clock-cells": + const: 0 + + clocks: + required: true + + div-m: + type: int + required: true + description: | + Division factor M of the PLL + input clock divider + Valid range: 1 - 8 + + mul-n: + type: int + required: true + description: | + PLL frequency multiplication factor N + Valid range: 4 - 127 + + div-p: + type: int + description: | + PLL VCO division factor P + Valid range: 2 - 32 + + div-q: + type: int + description: | + PLL VCO division factor Q + Valid range: 2 - 8 + + div-r: + type: int + required: true + description: | + PLL VCO division factor R + Valid range: 2 - 8 From ad0972af8bf87a1052553a71776df8d133169065 Mon Sep 17 00:00:00 2001 From: IBEN EL HADJ MESSAOUD Marwa Date: Thu, 1 Aug 2024 15:05:26 +0200 Subject: [PATCH 05/10] drivers: hwinfo: stm32u0: Clear standby and stop flags Add the function that clear standby and stop flags Signed-off-by: IBEN EL HADJ MESSAOUD Marwa --- drivers/hwinfo/hwinfo_stm32.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/hwinfo/hwinfo_stm32.c b/drivers/hwinfo/hwinfo_stm32.c index 239e54972f7e3e..1cd9688acc1e91 100644 --- a/drivers/hwinfo/hwinfo_stm32.c +++ b/drivers/hwinfo/hwinfo_stm32.c @@ -175,6 +175,8 @@ int z_impl_hwinfo_clear_reset_cause(void) LL_PWR_ClearFlag_MCU(); #elif defined(CONFIG_SOC_SERIES_STM32WLX) || defined(CONFIG_SOC_SERIES_STM32WBX) LL_PWR_ClearFlag_C1STOP_C1STB(); +#elif defined(CONFIG_SOC_SERIES_STM32U0X) && defined(PWR_FLAG_SB) + LL_PWR_ClearFlag_CSB(); #elif defined(PWR_FLAG_SB) LL_PWR_ClearFlag_SB(); #endif /* PWR_FLAG_SB */ From e498a748a3620762efb6163bcd4f28cb2a0b086c Mon Sep 17 00:00:00 2001 From: IBEN EL HADJ MESSAOUD Marwa Date: Mon, 22 Jul 2024 14:52:30 +0200 Subject: [PATCH 06/10] soc: st: stm32: Add serie stm32u0 Add STM32U0 familly support Signed-off-by: IBEN EL HADJ MESSAOUD Marwa --- soc/st/stm32/soc.yml | 3 ++ soc/st/stm32/stm32u0x/CMakeLists.txt | 10 +++++ soc/st/stm32/stm32u0x/Kconfig | 12 +++++ soc/st/stm32/stm32u0x/Kconfig.defconfig | 10 +++++ .../stm32u0x/Kconfig.defconfig.stm32u083xx | 11 +++++ soc/st/stm32/stm32u0x/Kconfig.soc | 18 ++++++++ soc/st/stm32/stm32u0x/soc.c | 45 +++++++++++++++++++ soc/st/stm32/stm32u0x/soc.h | 22 +++++++++ 8 files changed, 131 insertions(+) create mode 100644 soc/st/stm32/stm32u0x/CMakeLists.txt create mode 100644 soc/st/stm32/stm32u0x/Kconfig create mode 100644 soc/st/stm32/stm32u0x/Kconfig.defconfig create mode 100644 soc/st/stm32/stm32u0x/Kconfig.defconfig.stm32u083xx create mode 100644 soc/st/stm32/stm32u0x/Kconfig.soc create mode 100644 soc/st/stm32/stm32u0x/soc.c create mode 100644 soc/st/stm32/stm32u0x/soc.h diff --git a/soc/st/stm32/soc.yml b/soc/st/stm32/soc.yml index 50326de858eabd..f9e42f2ecb9edd 100644 --- a/soc/st/stm32/soc.yml +++ b/soc/st/stm32/soc.yml @@ -177,6 +177,9 @@ family: - name: stm32mp1x socs: - name: stm32mp157cxx + - name: stm32u0x + socs: + - name: stm32u083xx - name: stm32u5x socs: - name: stm32u5a5xx diff --git a/soc/st/stm32/stm32u0x/CMakeLists.txt b/soc/st/stm32/stm32u0x/CMakeLists.txt new file mode 100644 index 00000000000000..eebd281cd96be5 --- /dev/null +++ b/soc/st/stm32/stm32u0x/CMakeLists.txt @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: Apache-2.0 + +zephyr_include_directories(${ZEPHYR_BASE}/drivers) +zephyr_sources( + soc.c + ) + +zephyr_include_directories(.) + +set(SOC_LINKER_SCRIPT ${ZEPHYR_BASE}/include/zephyr/arch/arm/cortex_m/scripts/linker.ld CACHE INTERNAL "") diff --git a/soc/st/stm32/stm32u0x/Kconfig b/soc/st/stm32/stm32u0x/Kconfig new file mode 100644 index 00000000000000..20e21825cbb093 --- /dev/null +++ b/soc/st/stm32/stm32u0x/Kconfig @@ -0,0 +1,12 @@ +# ST Microelectronics STM32U0 MCU series + +# Copyright (c) 2024 STMicroelectronics +# SPDX-License-Identifier: Apache-2.0 + +config SOC_SERIES_STM32U0X + select ARM + select CPU_CORTEX_M0PLUS + select CPU_HAS_ARM_MPU + select CPU_CORTEX_M_HAS_VTOR + select HAS_STM32CUBE + select CPU_CORTEX_M_HAS_SYSTICK diff --git a/soc/st/stm32/stm32u0x/Kconfig.defconfig b/soc/st/stm32/stm32u0x/Kconfig.defconfig new file mode 100644 index 00000000000000..ead7304473e191 --- /dev/null +++ b/soc/st/stm32/stm32u0x/Kconfig.defconfig @@ -0,0 +1,10 @@ +# ST Microelectronics STM32U0 MCU line + +# Copyright (c) 2024 STMicroelectronics +# SPDX-License-Identifier: Apache-2.0 + +if SOC_SERIES_STM32U0X + +rsource "Kconfig.defconfig.stm32u0*" + +endif # SOC_SERIES_STM32U0X diff --git a/soc/st/stm32/stm32u0x/Kconfig.defconfig.stm32u083xx b/soc/st/stm32/stm32u0x/Kconfig.defconfig.stm32u083xx new file mode 100644 index 00000000000000..9b4fc121ab4678 --- /dev/null +++ b/soc/st/stm32/stm32u0x/Kconfig.defconfig.stm32u083xx @@ -0,0 +1,11 @@ +# STMicroelectronics STM32U083XX MCU + +# Copyright (c) 2024 STMicroelectronics +# SPDX-License-Identifier: Apache-2.0 + +if SOC_STM32U083XX + +config NUM_IRQS + default 32 + +endif # SOC_STM32U083XX diff --git a/soc/st/stm32/stm32u0x/Kconfig.soc b/soc/st/stm32/stm32u0x/Kconfig.soc new file mode 100644 index 00000000000000..d399cce6b33e0b --- /dev/null +++ b/soc/st/stm32/stm32u0x/Kconfig.soc @@ -0,0 +1,18 @@ +# ST Microelectronics STM32U0 MCU line + +# Copyright (c) 2024 STMicroelectronics +# SPDX-License-Identifier: Apache-2.0 + +config SOC_SERIES_STM32U0X + bool + select SOC_FAMILY_STM32 + +config SOC_SERIES + default "stm32u0x" if SOC_SERIES_STM32U0X + +config SOC_STM32U083XX + bool + select SOC_SERIES_STM32U0X + +config SOC + default "stm32u083xx" if SOC_STM32U083XX diff --git a/soc/st/stm32/stm32u0x/soc.c b/soc/st/stm32/stm32u0x/soc.c new file mode 100644 index 00000000000000..2d28cd9ad2a2de --- /dev/null +++ b/soc/st/stm32/stm32u0x/soc.c @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2024 STMicroelectronics + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @file + * @brief System/hardware module for STM32U0 processor + */ + +#include +#include +#include +#include +#include + +#include + +#define LOG_LEVEL CONFIG_SOC_LOG_LEVEL +LOG_MODULE_REGISTER(soc); + +/** + * @brief Perform basic hardware initialization at boot. + * + * This needs to be run from the very beginning. + * So the init priority has to be 0 (zero). + * + * @return 0 + */ +static int stm32u0_init(void) +{ + /* Enable ART Accelerator prefetch */ + LL_FLASH_EnablePrefetch(); + + /* Update CMSIS SystemCoreClock variable (HCLK) */ + /* At reset, system core clock is set to 16 MHz from HSI */ + SystemCoreClock = 16000000; + + LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR); + + return 0; +} + +SYS_INIT(stm32u0_init, PRE_KERNEL_1, 0); diff --git a/soc/st/stm32/stm32u0x/soc.h b/soc/st/stm32/stm32u0x/soc.h new file mode 100644 index 00000000000000..4826140332c423 --- /dev/null +++ b/soc/st/stm32/stm32u0x/soc.h @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2024 STMicroelectronics + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @file SoC configuration macros for the STM32U0 family processors. + * + */ + + +#ifndef _STM32U0_SOC_H_ +#define _STM32U0_SOC_H_ + +#ifndef _ASMLANGUAGE + +#include + +#endif /* !_ASMLANGUAGE */ + +#endif /* _STM32U0_SOC_H_ */ From 20ceb4a8ef5ab734d828e3fb3c76928850123142 Mon Sep 17 00:00:00 2001 From: IBEN EL HADJ MESSAOUD Marwa Date: Tue, 13 Aug 2024 17:08:07 +0200 Subject: [PATCH 07/10] drivers: flash: flash_stm32: Fix log warning Cast the argument to "unsigned long" to avoid the warning Signed-off-by: IBEN EL HADJ MESSAOUD Marwa --- drivers/flash/flash_stm32.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/flash/flash_stm32.c b/drivers/flash/flash_stm32.c index 2dcf63f3208937..15ced27e49565d 100644 --- a/drivers/flash/flash_stm32.c +++ b/drivers/flash/flash_stm32.c @@ -92,7 +92,7 @@ static int flash_stm32_check_status(const struct device *dev) if (FLASH_STM32_REGS(dev)->FLASH_STM32_SR & FLASH_STM32_SR_ERRORS) { LOG_DBG("Status: 0x%08lx", - FLASH_STM32_REGS(dev)->FLASH_STM32_SR & + (unsigned long)FLASH_STM32_REGS(dev)->FLASH_STM32_SR & FLASH_STM32_SR_ERRORS); /* Clear errors to unblock usage of the flash */ FLASH_STM32_REGS(dev)->FLASH_STM32_SR = FLASH_STM32_REGS(dev)->FLASH_STM32_SR & From d021756eada852a786e9869baab7130938638b39 Mon Sep 17 00:00:00 2001 From: IBEN EL HADJ MESSAOUD Marwa Date: Mon, 22 Jul 2024 15:05:40 +0200 Subject: [PATCH 08/10] drivers: clock_control: Add stm32u0 clock control support Reuse the file clock_stm32g0.c for the STM32U0 and rename it to clock_stm32g0_u0.c because the G0 and U0 series share the same clock control. Signed-off-by: IBEN EL HADJ MESSAOUD Marwa --- drivers/clock_control/CMakeLists.txt | 3 ++- drivers/clock_control/{clock_stm32g0.c => clock_stm32g0_u0.c} | 0 2 files changed, 2 insertions(+), 1 deletion(-) rename drivers/clock_control/{clock_stm32g0.c => clock_stm32g0_u0.c} (100%) diff --git a/drivers/clock_control/CMakeLists.txt b/drivers/clock_control/CMakeLists.txt index 43f86e8c7d38cf..9721ac5093c986 100644 --- a/drivers/clock_control/CMakeLists.txt +++ b/drivers/clock_control/CMakeLists.txt @@ -55,12 +55,13 @@ else() zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32F3X clock_stm32f0_f3.c) zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32F4X clock_stm32f2_f4_f7.c) zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32F7X clock_stm32f2_f4_f7.c) - zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32G0X clock_stm32g0.c) + zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32G0X clock_stm32g0_u0.c) zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32G4X clock_stm32g4.c) zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32L0X clock_stm32l0_l1.c) zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32L1X clock_stm32l0_l1.c) zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32L4X clock_stm32l4_l5_wb_wl.c) zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32L5X clock_stm32l4_l5_wb_wl.c) + zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32U0X clock_stm32g0_u0.c) zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32WBX clock_stm32l4_l5_wb_wl.c) zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32WLX clock_stm32l4_l5_wb_wl.c) endif() diff --git a/drivers/clock_control/clock_stm32g0.c b/drivers/clock_control/clock_stm32g0_u0.c similarity index 100% rename from drivers/clock_control/clock_stm32g0.c rename to drivers/clock_control/clock_stm32g0_u0.c From 81492fabcbd35f3f495db8f7981e9330dda7aace Mon Sep 17 00:00:00 2001 From: IBEN EL HADJ MESSAOUD Marwa Date: Mon, 22 Jul 2024 15:00:10 +0200 Subject: [PATCH 09/10] boards: st: Add nucleo_u083rc board support Add board support for nucleo_u083rc Signed-off-by: IBEN EL HADJ MESSAOUD Marwa --- boards/st/nucleo_u083rc/Kconfig.nucleo_u083rc | 5 + .../nucleo_u083rc/arduino_r3_connector.dtsi | 38 +++ boards/st/nucleo_u083rc/board.cmake | 9 + boards/st/nucleo_u083rc/board.yml | 5 + .../nucleo_u083rc/doc/img/nucleo_u083rc.jpg | Bin 0 -> 56224 bytes boards/st/nucleo_u083rc/doc/index.rst | 274 ++++++++++++++++++ boards/st/nucleo_u083rc/nucleo_u083rc.dts | 83 ++++++ boards/st/nucleo_u083rc/nucleo_u083rc.yaml | 12 + .../st/nucleo_u083rc/nucleo_u083rc_defconfig | 24 ++ .../st/nucleo_u083rc/st_morpho_connector.dtsi | 67 +++++ 10 files changed, 517 insertions(+) create mode 100644 boards/st/nucleo_u083rc/Kconfig.nucleo_u083rc create mode 100644 boards/st/nucleo_u083rc/arduino_r3_connector.dtsi create mode 100644 boards/st/nucleo_u083rc/board.cmake create mode 100644 boards/st/nucleo_u083rc/board.yml create mode 100644 boards/st/nucleo_u083rc/doc/img/nucleo_u083rc.jpg create mode 100644 boards/st/nucleo_u083rc/doc/index.rst create mode 100644 boards/st/nucleo_u083rc/nucleo_u083rc.dts create mode 100644 boards/st/nucleo_u083rc/nucleo_u083rc.yaml create mode 100644 boards/st/nucleo_u083rc/nucleo_u083rc_defconfig create mode 100644 boards/st/nucleo_u083rc/st_morpho_connector.dtsi diff --git a/boards/st/nucleo_u083rc/Kconfig.nucleo_u083rc b/boards/st/nucleo_u083rc/Kconfig.nucleo_u083rc new file mode 100644 index 00000000000000..fee320c29161bd --- /dev/null +++ b/boards/st/nucleo_u083rc/Kconfig.nucleo_u083rc @@ -0,0 +1,5 @@ +# Copyright (c) 2024 STMicroelectronics +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_NUCLEO_U083RC + select SOC_STM32U083XX diff --git a/boards/st/nucleo_u083rc/arduino_r3_connector.dtsi b/boards/st/nucleo_u083rc/arduino_r3_connector.dtsi new file mode 100644 index 00000000000000..cb596a6c00a450 --- /dev/null +++ b/boards/st/nucleo_u083rc/arduino_r3_connector.dtsi @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2024 STMicroelectronics + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + arduino_header: connector { + compatible = "arduino-header-r3"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map = <0 0 &gpioa 0 0>, /* A0 */ + <1 0 &gpioa 1 0>, /* A1 */ + <2 0 &gpioa 4 0>, /* A2 */ + <3 0 &gpiob 0 0>, /* A3 */ + <4 0 &gpioc 1 0>, /* A4 */ + <5 0 &gpioc 0 0>, /* A5 */ + <6 0 &gpioa 3 0>, /* D0 */ + <7 0 &gpioa 2 0>, /* D1 */ + <8 0 &gpioa 10 0>, /* D2 */ + <9 0 &gpiob 3 0>, /* D3 */ + <10 0 &gpiob 5 0>, /* D4 */ + <11 0 &gpiob 4 0>, /* D5 */ + <12 0 &gpiob 10 0>, /* D6 */ + <13 0 &gpioa 8 0>, /* D7 */ + <14 0 &gpioa 9 0>, /* D8 */ + <15 0 &gpioc 7 0>, /* D9 */ + <16 0 &gpiob 6 0>, /* D10 */ + <17 0 &gpioa 7 0>, /* D11 */ + <18 0 &gpioa 6 0>, /* D12 */ + <19 0 &gpioa 5 0>, /* D13 */ + <20 0 &gpiob 9 0>, /* D14 */ + <21 0 &gpiob 8 0>; /* D15 */ + }; +}; + +arduino_serial: &usart2 {}; diff --git a/boards/st/nucleo_u083rc/board.cmake b/boards/st/nucleo_u083rc/board.cmake new file mode 100644 index 00000000000000..d969b9dff1a0bc --- /dev/null +++ b/boards/st/nucleo_u083rc/board.cmake @@ -0,0 +1,9 @@ +board_runner_args(stm32cubeprogrammer "--port=swd" "--reset-mode=hw") + +board_runner_args(pyocd "--target=stm32u083rctx") + +board_runner_args(jlink "--device=STM32U083RC" "--reset-after-load") + +include(${ZEPHYR_BASE}/boards/common/stm32cubeprogrammer.board.cmake) +include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/boards/st/nucleo_u083rc/board.yml b/boards/st/nucleo_u083rc/board.yml new file mode 100644 index 00000000000000..65d9734b2885d6 --- /dev/null +++ b/boards/st/nucleo_u083rc/board.yml @@ -0,0 +1,5 @@ +board: + name: nucleo_u083rc + vendor: st + socs: + - name: stm32u083xx diff --git a/boards/st/nucleo_u083rc/doc/img/nucleo_u083rc.jpg b/boards/st/nucleo_u083rc/doc/img/nucleo_u083rc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ecb54648626658530a8b994fd11cde00fac8041f GIT binary patch literal 56224 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 literal 0 HcmV?d00001 diff --git a/boards/st/nucleo_u083rc/doc/index.rst b/boards/st/nucleo_u083rc/doc/index.rst new file mode 100644 index 00000000000000..6786c30ffdd962 --- /dev/null +++ b/boards/st/nucleo_u083rc/doc/index.rst @@ -0,0 +1,274 @@ +.. _nucleo_u083rc_board: + +ST Nucleo U083RC +################ + +Overview +******** + +The Nucleo U083RC board, featuring an ARM Cortex-M0+ based STM32U083RC MCU, +provides an affordable and flexible way for users to try out new concepts and +build prototypes by choosing from the various combinations of performance and +power consumption features. Here are some highlights of the Nucleo U083RC +board: + + +- STM32U083RC microcontroller in LQFP64 package +- Two types of extension resources: + + - Arduino Uno V3 connectivity + - ST morpho extension pin headers for full access to all STM32U0 I/Os + +- On-board STLINK-V2EC debugger/programmer with USB re-enumeration + capability: mass storage, Virtual COM port, and debug port +- Flexible board power supply: + + - USB VBUS or external source(3.3V, 5V, 7 - 12V) + +- User LED shared with ARDUINO |reg| Uno V3 +- Two push-buttons: USER and RESET +- USB Type-C |reg| connector for the ST-LINK + +Hardware +******** + +The STM32U083xC devices are an ultra-low-power microcontrollers family (STM32U0 +Series) based on the high-performance Arm |reg| Cortex |reg|-M0+ 32-bit RISC core. +They operate at a frequency of up to 56 MHz. + +- Includes ST state-of-the-art patented technology +- Ultra-low-power with FlexPowerControl: + + - 1.71 V to 3.6 V power supply + - -40 °C to +85/125 °C temperature range + - 130 nA VBAT mode: supply for RTC, 9 x 32-bit backup registers + - 16 nA Shutdown mode (6 wake-up pins) + - 30 nA Standby mode (6 wake-up pins) without RTC + - 160 nA Standby mode with RTC + - 825 nA Stop 2 mode with RTC + - 695 nA Stop 2 mode without RTC + - 4 µA wake-up from Stop mode + - 52 µA/MHz Run mode + - Brownout reset + +- Core: + + - 32-bit Arm |reg| Cortex |reg|-M0+ CPU, frequency up to 56 MHz + +- ART Accelerator: + + - 1-Kbyte instruction cache allowing 0-wait-state execution from flash memory + +- Benchmarks: + + - 1.13 DMIPS/MHz (Drystone 2.1) + - 134 CoreMark |reg| (2.4 CoreMark/MHz at 56 MHz) + - 407 ULPMark™-CP + - 143 ULPMark™-PP + - 19.7 ULPMark™-CM + +- Memories: + + - 256-Kbyte single bank flash memory, proprietary code readout protection + - 40-Kbyte SRAM with hardware parity check + +- General-purpose input/outputs: + + - Up to 69 fast I/Os, most of them 5 V‑tolerant + +- Clock management: + + - 4 to 48 MHz crystal oscillator + - 32 kHz crystal oscillator for RTC (LSE) + - Internal 16 MHz factory-trimmed RC (±1%) + - Internal low-power 32 kHz RC (±5%) + - Internal multispeed 100 kHz to 48 MHz oscillator, + auto-trimmed by LSE (better than ±0.25 % accuracy) + - Internal 48 MHz with clock recovery + - PLL for system clock, USB, ADC + +- Security: + + - Customer code protection + - Robust read out protection (RDP): 3 protection level states + and password-based regression (128-bit PSWD) + - Hardware protection feature (HDP) + - Secure boot + - AES: 128/256-bit key encryption hardware accelerator + - True random number generation, candidate for NIST SP 800-90B certification + - Candidate for Arm |reg| PSA level 1 and SESIP level 3 certifications + - 5 passive anti-tamper pins + - 96-bit unique ID + +- Up to 10 timers, 2 watchdogs and RTC: + + - 1x 16-bit advanced motor-control, 1x 32-bit and 3x 16-bit general purpose, + 2x 16-bit basic, 3x low-power 16-bit timers (available in Stop mode), + 2x watchdogs, SysTick timer + - RTC with hardware calendar, alarms and calibration + +- Up to 20 communication peripherals: + + - 1 USB 2.0 full-speed crystal-less solution with LPM and BCD + - 7 USARTs/LPUARTs (SPI, ISO 7816, LIN, IrDA, modem) + - 4 I2C interfaces supporting Fast-mode and Fast-mode Plus (up to 1 Mbit/s) + - 3 SPIs, plus 4x USARTs in SPI mode + - IRTIM (Infrared interface) + +- Rich analog peripherals (independent supply): + + - 1x 12-bit ADC (0.4 µs conversion time), up to 16-bit with hardware oversampling + - 1x 12-bit DAC output channel, low-power sample and hold + - 1x general-purpose operational amplifier with built-in PGA (variable gain up to 16) + - 2x ultra-low-power comparators + +- ECOPACK2 compliant packages + +More information about STM32U083RC can be found here: + +- `STM32U083RC on www.st.com`_ +- `STM32U083 reference manual`_ + +Supported Features +================== + +The Zephyr nucleo_u083rc board configuration supports the following hardware features: + ++-----------+------------+-------------------------------------+ +| Interface | Controller | Driver/Component | ++===========+============+=====================================+ +| CLOCK | on-chip | reset and clock control | ++-----------+------------+-------------------------------------+ +| GPIO | on-chip | gpio | ++-----------+------------+-------------------------------------+ +| NVIC | on-chip | nested vector interrupt controller | ++-----------+------------+-------------------------------------+ +| UART | on-chip | serial port-polling; | +| | | serial port-interrupt | ++-----------+------------+-------------------------------------+ + + +Other hardware features are not yet supported on this Zephyr port. + +The default configuration can be found in the defconfig file: +:zephyr_file:`boards/st/nucleo_u083rc/nucleo_u083rc_defconfig` + + +Connections and IOs +=================== + +Nucleo U083RC Board has 10 GPIO controllers. These controllers are responsible +for pin muxing, input/output, pull-up, etc. + +For more details please refer to `STM32U083 User Manual`_. + +Default Zephyr Peripheral Mapping: +---------------------------------- + +- DAC1_OUT1 : PA4 +- I2C1_SCL : PB8 +- I2C1_SDA : PB9 +- LPUART_1_TX : PG7 +- LPUART_1_RX : PG8 +- SPI1_NSS : PA4 +- SPI1_SCK : PA5 +- SPI1_MISO : PA6 +- SPI1_MOSI : PA7 +- UART_2_TX : PA2 +- UART_2_RX : PA3 +- USER_PB : PC13 + +System Clock +------------ + +Nucleo U083RC System Clock could be driven by internal or external oscillator, +as well as main PLL clock. By default System clock is driven by PLL clock at +48MHz, driven by 4MHz medium speed internal oscillator. + +Serial Port +----------- + +Nucleo U083RC board has 7 U(S)ARTs. The Zephyr console output is assigned to +USART2. Default settings are 115200 8N1. + + +Programming and Debugging +************************* + +Nucleo U083RC board includes an ST-LINK/V3 embedded debug tool interface. +This probe allows to flash the board using various tools. + +Flashing +======== + +Board is configured to be flashed using west STM32CubeProgrammer runner. +Installation of `STM32CubeProgrammer`_ is then required to flash the board. + +Alternatively, pyocd or jlink via an external probe can also be used to flash +and debug the board if west is told to use it as runner, which can be done by +passing either or ``-r pyocd``, or ``-r jlink``. + +For pyocd additional target information needs to be installed. +This can be done by executing the following commands. + +.. code-block:: console + + $ pyocd pack --update + $ pyocd pack --install stm32u0 + + +Flashing an application to Nucleo U083RC +------------------------------------------ + +Connect the Nucleo U083RC to your host computer using the USB port. +Then build and flash an application. Here is an example for the +:ref:`hello_world` application. + +Run a serial host program to connect with your Nucleo board: + +.. code-block:: console + + $ minicom -D /dev/ttyACM0 + +Then build and flash the application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: nucleo_u083rc + :goals: build flash + +You should see the following message on the console: + +.. code-block:: console + + Hello World! nucleo_u083rc/stm32u083xx + +Debugging +========= + +Default flasher for this board is openocd. It could be used in the usual way. +Here is an example for the :zephyr:code-sample:`blinky` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/basic/blinky + :board: nucleo_u083rc + :goals: debug + +Note: Check the ``build/tfm`` directory to ensure that the commands required by these scripts +(``readlink``, etc.) are available on your system. Please also check ``STM32_Programmer_CLI`` +(which is used for initialization) is available in the PATH. + +.. _NUCLEO_U083RC website: + https://www.st.com/en/evaluation-tools/nucleo-u083rc.html + +.. _STM32U083 User Manual: + https://www.st.com/resource/en/user_manual/um3261-stm32u0-series-safety-manual-stmicroelectronics.pdf + +.. _STM32U083RC on www.st.com: + https://www.st.com/en/microcontrollers-microprocessors/stm32u083rc + +.. _STM32U083 reference manual: + https://www.st.com/resource/en/reference_manual/rm0503-stm32u0-series-advanced-armbased-32bit-mcus-stmicroelectronics.pdf + +.. _STM32CubeProgrammer: + https://www.st.com/en/development-tools/stm32cubeprog.html diff --git a/boards/st/nucleo_u083rc/nucleo_u083rc.dts b/boards/st/nucleo_u083rc/nucleo_u083rc.dts new file mode 100644 index 00000000000000..ffa8d93aca1b7b --- /dev/null +++ b/boards/st/nucleo_u083rc/nucleo_u083rc.dts @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2024 STMicroelectronics + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include +#include "arduino_r3_connector.dtsi" +#include + +/ { + model = "STMicroelectronics STM32U83RC-NUCLEO board"; + compatible = "st,stm32u083rc-nucleo"; + + #address-cells = <1>; + #size-cells = <1>; + + chosen { + zephyr,console = &usart2; + zephyr,shell-uart = &usart2; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds: leds { + compatible = "gpio-leds"; + green_led_1: led_4 { + gpios = <&gpioa 5 GPIO_ACTIVE_HIGH>; + label = "User LD4"; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + user_button: button { + label = "User"; + gpios = <&gpioc 13 GPIO_ACTIVE_HIGH>; + zephyr,code = ; + }; + }; + + aliases { + led0 = &green_led_1; + sw0 = &user_button; + }; +}; + +&usart1 { + pinctrl-0 = <&usart1_tx_pa9 &usart1_rx_pa10>; + pinctrl-names = "default"; + current-speed = <115200>; + status = "okay"; +}; + +&usart2 { + pinctrl-0 = <&usart2_tx_pa2 &usart2_rx_pa3>; + pinctrl-names = "default"; + current-speed = <115200>; + status = "okay"; +}; + +&clk_hsi { + status = "okay"; +}; + +&pll { + div-m = <1>; + mul-n = <6>; + div-p = <2>; + div-q = <2>; + div-r = <2>; + clocks = <&clk_hsi>; + status = "okay"; +}; + +&rcc { + clocks = <&pll>; + clock-frequency = ; + ahb-prescaler = <1>; + apb1-prescaler = <1>; +}; diff --git a/boards/st/nucleo_u083rc/nucleo_u083rc.yaml b/boards/st/nucleo_u083rc/nucleo_u083rc.yaml new file mode 100644 index 00000000000000..d8b1e17ee2c815 --- /dev/null +++ b/boards/st/nucleo_u083rc/nucleo_u083rc.yaml @@ -0,0 +1,12 @@ +identifier: nucleo_u083rc +name: ST Nucleo U083RC +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - gpio +ram: 40 +flash: 256 diff --git a/boards/st/nucleo_u083rc/nucleo_u083rc_defconfig b/boards/st/nucleo_u083rc/nucleo_u083rc_defconfig new file mode 100644 index 00000000000000..579a5c3fc4ef31 --- /dev/null +++ b/boards/st/nucleo_u083rc/nucleo_u083rc_defconfig @@ -0,0 +1,24 @@ +# SPDX-License-Identifier: Apache-2.0 + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable HW stack protection +CONFIG_HW_STACK_PROTECTION=y + +# Serial Drivers +CONFIG_SERIAL=y +CONFIG_UART_INTERRUPT_DRIVEN=y + +# enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# GPIO Controller +CONFIG_GPIO=y + +# Enable Clocks +CONFIG_CLOCK_CONTROL=y + +# enable pin controller +CONFIG_PINCTRL=y diff --git a/boards/st/nucleo_u083rc/st_morpho_connector.dtsi b/boards/st/nucleo_u083rc/st_morpho_connector.dtsi new file mode 100644 index 00000000000000..698937c5da1b08 --- /dev/null +++ b/boards/st/nucleo_u083rc/st_morpho_connector.dtsi @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2024 STMicroelectronics + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include + +/ { + st_morpho_header: st-morpho-header { + compatible = "st-morpho-header"; + #gpio-cells = <2>; + gpio-map-mask = ; + gpio-map-pass-thru = <0x0 GPIO_DT_FLAGS_MASK>; + gpio-map = , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + ; + }; +}; From 7b0c2d67e20fa09e6837e870cef976979f41abe5 Mon Sep 17 00:00:00 2001 From: IBEN EL HADJ MESSAOUD Marwa Date: Mon, 29 Jul 2024 18:17:25 +0200 Subject: [PATCH 10/10] boards: st: Add stm32u083c_dk board support Add board support for stm32u083c_dk Signed-off-by: IBEN EL HADJ MESSAOUD Marwa --- boards/st/stm32u083c_dk/Kconfig.stm32u083c_dk | 5 + .../stm32u083c_dk/arduino_r3_connector.dtsi | 38 +++ boards/st/stm32u083c_dk/board.cmake | 9 + boards/st/stm32u083c_dk/board.yml | 5 + .../stm32u083c_dk/doc/img/stm32u083c_dk.jpg | Bin 0 -> 80951 bytes boards/st/stm32u083c_dk/doc/index.rst | 287 ++++++++++++++++++ boards/st/stm32u083c_dk/stm32u083c_dk.dts | 73 +++++ boards/st/stm32u083c_dk/stm32u083c_dk.yaml | 12 + .../st/stm32u083c_dk/stm32u083c_dk_defconfig | 24 ++ 9 files changed, 453 insertions(+) create mode 100644 boards/st/stm32u083c_dk/Kconfig.stm32u083c_dk create mode 100644 boards/st/stm32u083c_dk/arduino_r3_connector.dtsi create mode 100644 boards/st/stm32u083c_dk/board.cmake create mode 100644 boards/st/stm32u083c_dk/board.yml create mode 100644 boards/st/stm32u083c_dk/doc/img/stm32u083c_dk.jpg create mode 100644 boards/st/stm32u083c_dk/doc/index.rst create mode 100644 boards/st/stm32u083c_dk/stm32u083c_dk.dts create mode 100644 boards/st/stm32u083c_dk/stm32u083c_dk.yaml create mode 100644 boards/st/stm32u083c_dk/stm32u083c_dk_defconfig diff --git a/boards/st/stm32u083c_dk/Kconfig.stm32u083c_dk b/boards/st/stm32u083c_dk/Kconfig.stm32u083c_dk new file mode 100644 index 00000000000000..1e14dd59b9bc97 --- /dev/null +++ b/boards/st/stm32u083c_dk/Kconfig.stm32u083c_dk @@ -0,0 +1,5 @@ +# Copyright (c) 2024 STMicroelectronics +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_STM32U083C_DK + select SOC_STM32U083XX diff --git a/boards/st/stm32u083c_dk/arduino_r3_connector.dtsi b/boards/st/stm32u083c_dk/arduino_r3_connector.dtsi new file mode 100644 index 00000000000000..297fd9b7f18306 --- /dev/null +++ b/boards/st/stm32u083c_dk/arduino_r3_connector.dtsi @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2024 STMicroelectronics + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + arduino_header: connector { + compatible = "arduino-header-r3"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map = <0 0 &gpioa 0 0>, /* A0 */ + <1 0 &gpioa 1 0>, /* A1 */ + <2 0 &gpioa 4 0>, /* A2 */ + <3 0 &gpiob 0 0>, /* A3 */ + <4 0 &gpioc 1 0>, /* A4 */ + <5 0 &gpioc 0 0>, /* A5 */ + <6 0 &gpioa 3 0>, /* D0 */ + <7 0 &gpioa 2 0>, /* D1 */ + <8 0 &gpioc 12 0>, /* D2 */ + <9 0 &gpiob 3 0>, /* D3 */ + <10 0 &gpiob 5 0>, /* D4 */ + <11 0 &gpiob 4 0>, /* D5 */ + <12 0 &gpiob 10 0>, /* D6 */ + <13 0 &gpioa 8 0>, /* D7 */ + <14 0 &gpioa 9 0>, /* D8 */ + <15 0 &gpioc 7 0>, /* D9 */ + <16 0 &gpiob 6 0>, /* D10 */ + <17 0 &gpioa 7 0>, /* D11 */ + <18 0 &gpioa 6 0>, /* D12 */ + <19 0 &gpioa 5 0>, /* D13 */ + <20 0 &gpiob 9 0>, /* D14 */ + <21 0 &gpiob 8 0>; /* D15 */ + }; +}; + +arduino_serial: &usart2 {}; diff --git a/boards/st/stm32u083c_dk/board.cmake b/boards/st/stm32u083c_dk/board.cmake new file mode 100644 index 00000000000000..a274ab952ee485 --- /dev/null +++ b/boards/st/stm32u083c_dk/board.cmake @@ -0,0 +1,9 @@ +board_runner_args(stm32cubeprogrammer "--port=swd" "--reset-mode=hw") + +board_runner_args(pyocd "--target=stm32u083mctx") + +board_runner_args(jlink "--device=STM32U083C-DK" "--reset-after-load") + +include(${ZEPHYR_BASE}/boards/common/stm32cubeprogrammer.board.cmake) +include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/boards/st/stm32u083c_dk/board.yml b/boards/st/stm32u083c_dk/board.yml new file mode 100644 index 00000000000000..7bcf691ac69150 --- /dev/null +++ b/boards/st/stm32u083c_dk/board.yml @@ -0,0 +1,5 @@ +board: + name: stm32u083c_dk + vendor: st + socs: + - name: stm32u083xx diff --git a/boards/st/stm32u083c_dk/doc/img/stm32u083c_dk.jpg b/boards/st/stm32u083c_dk/doc/img/stm32u083c_dk.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c196a75854f8c47d692f8465d3b59fc2ddff17e GIT binary patch literal 80951 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 YuTFJTJS_jmP4a) +#include +#include "arduino_r3_connector.dtsi" +#include + +/ { + model = "STMicroelectronics STM32U83C-DK board"; + compatible = "st,stm32u083c-dk"; + + #address-cells = <1>; + #size-cells = <1>; + + chosen { + zephyr,console = &usart2; + zephyr,shell-uart = &usart2; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds: leds { + compatible = "gpio-leds"; + green_led_1: led_3 { + gpios = <&gpioc 13 GPIO_ACTIVE_HIGH>; + label = "User LD3"; + }; + }; + + aliases { + led0 = &green_led_1; + }; +}; + +&usart1 { + pinctrl-0 = <&usart1_tx_pa9 &usart1_rx_pa10>; + pinctrl-names = "default"; + current-speed = <115200>; + status = "okay"; +}; + +&usart2 { + pinctrl-0 = <&usart2_tx_pa2 &usart2_rx_pa3>; + pinctrl-names = "default"; + current-speed = <115200>; + status = "okay"; +}; + +&clk_hsi { + status = "okay"; +}; + +&pll { + div-m = <1>; + mul-n = <6>; + div-p = <2>; + div-q = <2>; + div-r = <2>; + clocks = <&clk_hsi>; + status = "okay"; +}; + +&rcc { + clocks = <&pll>; + clock-frequency = ; + ahb-prescaler = <1>; + apb1-prescaler = <1>; +}; diff --git a/boards/st/stm32u083c_dk/stm32u083c_dk.yaml b/boards/st/stm32u083c_dk/stm32u083c_dk.yaml new file mode 100644 index 00000000000000..02972158eb3db2 --- /dev/null +++ b/boards/st/stm32u083c_dk/stm32u083c_dk.yaml @@ -0,0 +1,12 @@ +identifier: stm32u083c_dk +name: ST STM32U083C-DK Discovery Kit +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - gpio +ram: 40 +flash: 256 diff --git a/boards/st/stm32u083c_dk/stm32u083c_dk_defconfig b/boards/st/stm32u083c_dk/stm32u083c_dk_defconfig new file mode 100644 index 00000000000000..579a5c3fc4ef31 --- /dev/null +++ b/boards/st/stm32u083c_dk/stm32u083c_dk_defconfig @@ -0,0 +1,24 @@ +# SPDX-License-Identifier: Apache-2.0 + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable HW stack protection +CONFIG_HW_STACK_PROTECTION=y + +# Serial Drivers +CONFIG_SERIAL=y +CONFIG_UART_INTERRUPT_DRIVEN=y + +# enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# GPIO Controller +CONFIG_GPIO=y + +# Enable Clocks +CONFIG_CLOCK_CONTROL=y + +# enable pin controller +CONFIG_PINCTRL=y