From 3ce5226a1e2795cdde70e761326a842f2ebc1be2 Mon Sep 17 00:00:00 2001 From: heronet Date: Thu, 19 Jun 2025 23:00:40 +0600 Subject: [PATCH] boards: arm: add WeAct STM32F446 Core board MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add support for WeAct STM32F446 Core board featuring: - STM32F446RET6 MCU (ARM Cortex-M4F @ 180 MHz) - 512KB Flash, 128KB SRAM - 8MHz HSE crystal oscillator - USB Type-C connector with DFU support - User LED (PB2) and button (PC13) - MicroSD card slot (SDIO) - SWD debug header - 30×2 pin headers exposing GPIO pins Peripherals supported: - 4x USART/UART - 4x I2C - 4x SPI/I2S - 2x CAN - 3x 12-bit ADC - 2x 12-bit DAC - USB OTG FS - SDIO interface Tested with samples/basic/blinky and samples/hello_world. Signed-off-by: Siratul Islam Signed-off-by: heronet --- .../Kconfig.weact_stm32f446_core | 5 + boards/weact/stm32f446_core/board.cmake | 8 + boards/weact/stm32f446_core/board.yml | 6 + .../doc/img/stm32f446_core.webp | Bin 0 -> 60298 bytes boards/weact/stm32f446_core/doc/index.rst | 165 ++++++++++++++++++ .../weact/stm32f446_core/support/openocd.cfg | 18 ++ .../stm32f446_core/weact_stm32f446_core.dts | 134 ++++++++++++++ .../stm32f446_core/weact_stm32f446_core.yaml | 19 ++ .../weact_stm32f446_core_defconfig | 16 ++ 9 files changed, 371 insertions(+) create mode 100644 boards/weact/stm32f446_core/Kconfig.weact_stm32f446_core create mode 100644 boards/weact/stm32f446_core/board.cmake create mode 100644 boards/weact/stm32f446_core/board.yml create mode 100644 boards/weact/stm32f446_core/doc/img/stm32f446_core.webp create mode 100644 boards/weact/stm32f446_core/doc/index.rst create mode 100644 boards/weact/stm32f446_core/support/openocd.cfg create mode 100644 boards/weact/stm32f446_core/weact_stm32f446_core.dts create mode 100644 boards/weact/stm32f446_core/weact_stm32f446_core.yaml create mode 100644 boards/weact/stm32f446_core/weact_stm32f446_core_defconfig diff --git a/boards/weact/stm32f446_core/Kconfig.weact_stm32f446_core b/boards/weact/stm32f446_core/Kconfig.weact_stm32f446_core new file mode 100644 index 00000000000..71f8cb118dd --- /dev/null +++ b/boards/weact/stm32f446_core/Kconfig.weact_stm32f446_core @@ -0,0 +1,5 @@ +# Copyright (c) 2025 Siratul Islam +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_WEACT_STM32F446_CORE + select SOC_STM32F446XX diff --git a/boards/weact/stm32f446_core/board.cmake b/boards/weact/stm32f446_core/board.cmake new file mode 100644 index 00000000000..4e4cb83a1fa --- /dev/null +++ b/boards/weact/stm32f446_core/board.cmake @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse") +board_runner_args(jlink "--device=STM32F446RE" "--speed=4000") + +include(${ZEPHYR_BASE}/boards/common/dfu-util.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) +include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) diff --git a/boards/weact/stm32f446_core/board.yml b/boards/weact/stm32f446_core/board.yml new file mode 100644 index 00000000000..80465f65a26 --- /dev/null +++ b/boards/weact/stm32f446_core/board.yml @@ -0,0 +1,6 @@ +board: + name: weact_stm32f446_core + full_name: STM32F446 Core Board V1.1 + vendor: weact + socs: + - name: stm32f446xx diff --git a/boards/weact/stm32f446_core/doc/img/stm32f446_core.webp b/boards/weact/stm32f446_core/doc/img/stm32f446_core.webp new file mode 100644 index 0000000000000000000000000000000000000000..5216a0db9fa2dd0b34631c725d05317b76ed89ae GIT binary patch literal 60298 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 H8~^|SairxP literal 0 HcmV?d00001 diff --git a/boards/weact/stm32f446_core/doc/index.rst b/boards/weact/stm32f446_core/doc/index.rst new file mode 100644 index 00000000000..9b86e286f35 --- /dev/null +++ b/boards/weact/stm32f446_core/doc/index.rst @@ -0,0 +1,165 @@ +.. zephyr:board:: weact_stm32f446_core + +Overview +******** + +The WeAct STM32F446 Core Board is an extremely low cost and bare-bones +development board featuring the STM32F446RE, see `STM32F446RE website`_. +This is the 64-pin variant of the STM32F446x series, +see `STM32F446x reference manual`_. More info about the board available +on `WeAct Github`_. + +Hardware +******** + +The STM32F446RE based Core Board provides the following +hardware components: + +- STM32F446RE in QFPN64 package +- ARM |reg| 32-bit Cortex |reg| -M4 CPU with FPU, Adaptive real-time + accelerator (ART Accelerator) allowing 0-wait state execution from Flash memory +- 180 MHz max CPU frequency +- VDD from 1.7 V to 3.6 V +- 512 KB Flash +- 128 Kbytes of SRAM +- GPIO with external interrupt capability +- 3x12-bit, 2.4 MSPS ADC up to 16 channels +- 2x12-bit D/A converters +- 16-stream DMA controller +- Up to 17 Timers (twelve 16-bit, two 32-bit, two watchdog timers and a SysTick timer) +- USART/UART (4) +- I2C (4) +- SPI/I2S (4) +- CAN (2) +- SDIO +- USB 2.0 full-speed device/host/OTG controller with on-chip PHY +- SAI (Serial Audio Interface) +- SPDIFRX interface +- HDMI-CEC +- CRC calculation unit +- 96-bit unique ID +- RTC with hardware calendar + + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +Pin Mapping +=========== + +Default Zephyr Peripheral Mapping: +---------------------------------- + +- UART_1 TX/RX : PA9/PA10 (also available on USB-C for console) +- UART_2 TX/RX : PA2/PA3 +- I2C1 SCL/SDA : PB6/PB7 +- I2C2 SCL/SDA : PB10/PB11 +- SPI1 SCK/MISO/MOSI : PA5/PA6/PA7 +- SPI2 SCK/MISO/MOSI : PB13/PB14/PB15 +- CAN1 TX/RX : PB9/PB8 +- SDMMC1 D0/D1/D2/D3/CLK/CMD : PC8/PC9/PC10/PC11/PC12/PD2 +- USER_PB : PC13 (Active Low) +- USER_LED : PB2 (Active High) +- USB_DM/USB_DP : PA11/PA12 + +OnBoard Features + +- USB Type-C connector +- User LED (PB2) - Active High +- User Key (PC13) - Active Low +- BOOT0 Key for DFU mode +- RESET Key +- 8MHz HSE crystal oscillator +- 32.768kHz LSE crystal oscillator +- MicroSD card slot (SDIO interface) +- SWD debug header (3.3V, GND, SWCLK, SWDIO) +- 30×2 pin headers exposing GPIO pins + +Clock Sources +------------- + +The board has two external oscillators. The frequency of the slow clock (LSE) is +32.768 kHz. The frequency of the main clock (HSE) is 8 MHz. + +The default configuration sources the system clock from the PLL, which is +derived from HSE, and is set at 180MHz, which is the maximum possible frequency +for the STM32F446RE. + +Programming and Debugging +************************* + +.. zephyr:board-supported-runners:: + +There are 2 main entry points for flashing STM32F4X SoCs, one using the ROM +bootloader, and another by using the SWD debug port (which requires additional +hardware). Flashing using the ROM bootloader requires a special activation +pattern, which can be triggered by using the BOOT0 pin. + +Flashing +======== + +Installing dfu-util +------------------- + +It is recommended to use at least v0.8 of `dfu-util`_. The package available in +debian/ubuntu can be quite old, so you might have to build dfu-util from source. + +There is also a Windows version which works, but you may have to install the +right USB drivers with a tool like `Zadig`_. + +Flashing an Application +----------------------- + +Connect a USB-C cable and the board should power ON. Force the board into DFU mode +by keeping the BOOT0 switch pressed while pressing and releasing the NRST switch. + +The dfu-util runner is supported on this board and so a sample can be built and +tested easily. + +.. zephyr-app-commands:: + :zephyr-app: samples/basic/blinky + :board: weact_stm32f446_core + :goals: build flash + +.. zephyr-app-commands:: + :zephyr-app: samples/basic/button + :board: weact_stm32f446_core + :goals: build flash + +.. zephyr-app-commands:: + :zephyr-app: samples/subsys/fs/fs_sample + :board: weact_stm32f446_core + :goals: build flash + + +Debugging +========= + +The board can be debugged by installing the included 100 mil (0.1 inch) header, +and attaching an SWD debugger to the 3V3 (3.3V), GND, SCK, and DIO +pins on that header. + +References +********** + +.. target-notes:: + +.. _board release notes: + https://github.com/WeActStudio/WeActStudio.STM32F4_64Pin_CoreBoard/blob/master/README.md + +.. _Zadig: + https://zadig.akeo.ie/ + +.. _WeAct Github: + https://github.com/WeActStudio/WeActStudio.STM32F4_64Pin_CoreBoard + +.. _dfu-util: + http://dfu-util.sourceforge.net/build.html + +.. _STM32F446RE website: + https://www.st.com/en/microcontrollers-microprocessors/stm32f446re.html + +.. _STM32F446x reference manual: + https://www.st.com/resource/en/reference_manual/rm0390-stm32f446xx-advanced-armbased-32bit-mcus-stmicroelectronics.pdf diff --git a/boards/weact/stm32f446_core/support/openocd.cfg b/boards/weact/stm32f446_core/support/openocd.cfg new file mode 100644 index 00000000000..451853a38bd --- /dev/null +++ b/boards/weact/stm32f446_core/support/openocd.cfg @@ -0,0 +1,18 @@ +source [find interface/stlink.cfg] + +transport select hla_swd + +source [find target/stm32f4x.cfg] + +reset_config srst_only + +$_TARGETNAME configure -event gdb-attach { + echo "Debugger attaching: halting execution" + reset halt + gdb_breakpoint_override hard +} + +$_TARGETNAME configure -event gdb-detach { + echo "Debugger detaching: resuming execution" + resume +} diff --git a/boards/weact/stm32f446_core/weact_stm32f446_core.dts b/boards/weact/stm32f446_core/weact_stm32f446_core.dts new file mode 100644 index 00000000000..83e05ed0f33 --- /dev/null +++ b/boards/weact/stm32f446_core/weact_stm32f446_core.dts @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2024 Siratul Islam + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include +#include + +/ { + model = "WeAct Studio STM32F446 Core Board"; + compatible = "weact,stm32f446-core", "st,stm32f446"; + + chosen { + zephyr,console = &usart1; + zephyr,shell-uart = &usart1; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds { + compatible = "gpio-leds"; + + led: led { + gpios = <&gpiob 2 GPIO_ACTIVE_HIGH>; + label = "User LED"; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + + user_button: button { + label = "User"; + gpios = <&gpioc 13 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>; + zephyr,code = ; + }; + }; + + aliases { + led0 = &led; + sw0 = &user_button; + watchdog0 = &iwdg; + sdhc0 = &sdmmc1; + }; +}; + +&clk_lsi { + status = "okay"; +}; + +&clk_hse { + clock-frequency = ; + status = "okay"; +}; + +&pll { + div-m = <8>; + mul-n = <360>; + div-p = <2>; + div-q = <2>; + clocks = <&clk_hse>; + status = "okay"; +}; + +&rcc { + clocks = <&pll>; + clock-frequency = ; + ahb-prescaler = <1>; + apb1-prescaler = <4>; + apb2-prescaler = <2>; +}; + + +&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"; +}; + +&i2c1 { + pinctrl-0 = <&i2c1_scl_pb6 &i2c1_sda_pb7>; + pinctrl-names = "default"; + status = "okay"; + clock-frequency = ; +}; + +&spi1 { + pinctrl-0 = <&spi1_sck_pa5 &spi1_miso_pa6 &spi1_mosi_pa7>; + pinctrl-names = "default"; + status = "okay"; +}; + +&can1 { + pinctrl-0 = <&can1_rx_pb8 &can1_tx_pb9>; + pinctrl-names = "default"; + status = "okay"; +}; + +&sdmmc1 { + status = "okay"; + pinctrl-0 = <&sdio_d0_pc8 &sdio_d1_pc9 + &sdio_d2_pc10 &sdio_d3_pc11 + &sdio_ck_pc12 &sdio_cmd_pd2>; + pinctrl-names = "default"; + cd-gpios = <&gpioa 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + disk-name = "SD"; +}; + +&rtc { + clocks = <&rcc STM32_CLOCK_BUS_APB1 0x10000000>, + <&rcc STM32_SRC_LSI RTC_SEL(2)>; + status = "okay"; +}; + +zephyr_udc0: &usbotg_fs { + pinctrl-0 = <&usb_otg_fs_dm_pa11 &usb_otg_fs_dp_pa12>; + pinctrl-names = "default"; + status = "okay"; +}; + +&iwdg { + status = "okay"; +}; diff --git a/boards/weact/stm32f446_core/weact_stm32f446_core.yaml b/boards/weact/stm32f446_core/weact_stm32f446_core.yaml new file mode 100644 index 00000000000..b79008a3f7d --- /dev/null +++ b/boards/weact/stm32f446_core/weact_stm32f446_core.yaml @@ -0,0 +1,19 @@ +identifier: weact_stm32f446_core +name: WeAct Studio STM32F446 Core Board +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb +ram: 128 +flash: 512 +supported: + - counter + - spi + - i2c + - uart + - can + - gpio + - watchdog + - backup_sram +vendor: weact diff --git a/boards/weact/stm32f446_core/weact_stm32f446_core_defconfig b/boards/weact/stm32f446_core/weact_stm32f446_core_defconfig new file mode 100644 index 00000000000..ecb4e20a166 --- /dev/null +++ b/boards/weact/stm32f446_core/weact_stm32f446_core_defconfig @@ -0,0 +1,16 @@ +# SPDX-License-Identifier: Apache-2.0 + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable HW stack protection +CONFIG_HW_STACK_PROTECTION=y + +CONFIG_SERIAL=y + +# Console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# Enable GPIO +CONFIG_GPIO=y