boards: weact: add weact stm32u585ci core board

Low cost STM32U585CI development board in blackpill package.

Signed-off-by: Michal Piekos <michal.piekos@wp.pl>
This commit is contained in:
Michal Piekos 2025-07-12 11:17:58 +02:00 committed by Fabio Baltieri
parent dd8a8697e2
commit db0e8a6ff3
8 changed files with 458 additions and 0 deletions

View File

@ -0,0 +1,5 @@
# Copyright (c) 2025 Michal Piekos
# SPDX-License-Identifier: Apache-2.0
config BOARD_BLACKPILL_U585CI
select SOC_STM32U585XX

View File

@ -0,0 +1,237 @@
/*
* Copyright (c) 2025 Michal Piekos
*
* SPDX-License-Identifier: Apache-2.0
*/
/dts-v1/;
#include <st/u5/stm32u585Xi.dtsi>
#include <st/u5/stm32u585ciux-pinctrl.dtsi>
#include <zephyr/dt-bindings/input/input-event-codes.h>
/ {
model = "WeAct Studio Black Pill STM32U585 Core Board";
compatible = "weact,blackpill-u585ci";
#address-cells = <1>;
#size-cells = <1>;
chosen {
zephyr,console = &usart1;
zephyr,shell-uart = &usart1;
zephyr,sram = &sram0;
zephyr,flash = &flash0;
zephyr,canbus = &fdcan1;
};
aliases {
led0 = &led_0;
sw0 = &button_0;
watchdog0 = &iwdg;
volt-sensor0 = &vref1;
volt-sensor1 = &vbat4;
die-temp0 = &die_temp;
};
leds {
compatible = "gpio-leds";
led_0: led0 {
gpios = <&gpioc 13 GPIO_ACTIVE_HIGH>;
label = "User LED";
};
};
gpio_keys {
compatible = "gpio-keys";
button_0: button0 {
label = "User Button";
gpios = <&gpioa 0 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>;
zephyr,code = <INPUT_KEY_0>;
};
};
zephyr,user {
io-channels = <&adc1 16>, <&adc4 18>;
};
};
&clk_hsi48 {
status = "okay";
};
&clk_lse {
status = "okay";
};
&clk_hse {
clock-frequency = <DT_FREQ_M(25)>;
status = "okay";
};
&clk_msis {
status = "okay";
msi-range = <4>;
msi-pll-mode;
};
&pll1 {
div-m = <5>;
mul-n = <32>;
div-q = <2>;
div-r = <1>;
clocks = <&clk_hse>;
status = "okay";
};
&rcc {
clocks = <&pll1>;
clock-frequency = <DT_FREQ_M(160)>;
ahb-prescaler = <1>;
apb1-prescaler = <1>;
apb2-prescaler = <1>;
apb3-prescaler = <1>;
};
&lpuart1 {
pinctrl-0 = <&lpuart1_tx_pa2 &lpuart1_rx_pa3>;
pinctrl-names = "default";
current-speed = <115200>;
status = "okay";
};
&usart1 {
pinctrl-0 = <&usart1_tx_pa9 &usart1_rx_pa10>;
pinctrl-names = "default";
current-speed = <115200>;
status = "okay";
};
&i2c1 {
pinctrl-0 = <&i2c1_scl_pb6 &i2c1_sda_pb3>;
pinctrl-names = "default";
status = "okay";
clock-frequency = <I2C_BITRATE_FAST>;
};
&i2c2 {
pinctrl-0 = <&i2c2_scl_pb10 &i2c2_sda_pb14>;
pinctrl-names = "default";
status = "okay";
clock-frequency = <I2C_BITRATE_FAST>;
};
&spi1 {
pinctrl-0 = <&spi1_nss_pa4 &spi1_sck_pa1
&spi1_miso_pa6 &spi1_mosi_pa7>;
pinctrl-names = "default";
status = "okay";
};
&fdcan1 {
clocks = <&rcc STM32_CLOCK_BUS_APB1_2 0x00000200>,
<&rcc STM32_SRC_PLL1_Q FDCAN1_SEL(1)>;
pinctrl-0 = <&fdcan1_rx_pb8 &fdcan1_tx_pb9>;
pinctrl-names = "default";
status = "okay";
};
&adc1 {
pinctrl-0 = <&adc1_in16_pb1>;
pinctrl-names = "default";
st,adc-clock-source = "ASYNC";
st,adc-prescaler = <4>;
status = "okay";
};
&adc4 {
pinctrl-0 = <&adc4_in18_pb0>;
pinctrl-names = "default";
st,adc-clock-source = "ASYNC";
st,adc-prescaler = <4>;
status = "okay";
};
&dac1 {
/* CAUTION: DAC on PA4 may conflict with SPI1 NSS on same pin */
pinctrl-0 = <&dac1_out1_pa4>;
pinctrl-names = "default";
status = "disabled";
};
&timers3 {
st,prescaler = <10000>;
status = "okay";
pwm3: pwm {
pinctrl-0 = <&tim3_ch1_pb4>;
pinctrl-names = "default";
status = "okay";
};
};
&timers4 {
st,prescaler = <10000>;
status = "okay";
pwm4: pwm {
pinctrl-0 = <&tim4_ch2_pb7>;
pinctrl-names = "default";
status = "okay";
};
};
zephyr_udc0: &usbotg_fs {
pinctrl-0 = <&usb_otg_fs_dm_pa11 &usb_otg_fs_dp_pa12>;
pinctrl-names = "default";
status = "okay";
cdc_acm_uart0: cdc_acm_uart0 {
compatible = "zephyr,cdc-acm-uart";
};
};
&iwdg {
status = "okay";
};
&rng {
status = "okay";
};
&gpdma1 {
status = "okay";
};
&die_temp {
status = "okay";
};
&rtc {
clocks = <&rcc STM32_CLOCK_BUS_APB3 0x00200000>,
<&rcc STM32_SRC_LSE RTC_SEL(1)>;
status = "okay";
};
&vref1 {
status = "okay";
};
&vbat4 {
status = "okay";
};
&clk_lsi {
status = "okay";
};
stm32_lp_tick_source: &lptim1 {
clocks = <&rcc STM32_CLOCK_BUS_APB3 0x00000800>,
<&rcc STM32_SRC_LSI LPTIM1_SEL(1)>;
status = "okay";
};
&backup_sram {
status = "okay";
};

View File

@ -0,0 +1,20 @@
identifier: blackpill_u585ci
name: WeAct Studio Black Pill STM32U585 Core Board
type: mcu
arch: arm
toolchain:
- zephyr
- gnuarmemb
supported:
- can
- adc
- gpio
- i2c
- spi
- usart
- watchdog
- dma
- rtc
ram: 784
flash: 2048
vendor: weact

View File

@ -0,0 +1,17 @@
# SPDX-License-Identifier: Apache-2.0
# Enable UART driver
CONFIG_SERIAL=y
# Enable GPIO
CONFIG_GPIO=y
# Console
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
# Enable MPU
CONFIG_ARM_MPU=y
# Enable HW stack protection
CONFIG_HW_STACK_PROTECTION=y

View File

@ -0,0 +1,7 @@
# keep first
board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse")
board_runner_args(blackmagicprobe "--gdb-serial=/dev/ttyACM0")
# keep first
include(${ZEPHYR_BASE}/boards/common/dfu-util.board.cmake)
include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake)

View File

@ -0,0 +1,6 @@
board:
name: blackpill_u585ci
full_name: WeAct Studio Black Pill STM32U585 Core Board
vendor: weact
socs:
- name: stm32u585xx

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,166 @@
.. zephyr:board:: blackpill_u585ci
Overview
********
The WeAct Black Pill STM32U585CI Core Board is an extremely low cost and bare-bone
development board featuring the STM32U585CI, see `STM32U585CI website`_.
This is the 48-pin variant of the STM32U585C series,
see `STM32U5 reference manual`_. More info about the board available
on `WeAct Github`_.
Key Features
- STM32U585CI microcontroller in UFQFPN48 package
- ARM |reg| 32-bit Cortex |reg| -M33 with TrustZone |reg|, MPU, DSP and FPU
- 160 MHz max CPU frequency, 1.5 DMPIS/MHz, 4.07 CoreMark |reg| /MHz
- 2 MB Flash with ECC and 2 banks
- 784 KB SRAM
- GPIO with external interrupt capability
- 1x14-bit 2.5 MSPS ADC, 1x12-bit 2.5 MSPS ADC
- 2x12-bit DAC
- USB OTG 2.0 full-speed controller
- 1 user LED
- User, boot, and reset push-buttons
- 32.768 kHz and 8MHz HSE crystal oscillators
- Board connectors:
- USB Type-C |reg| Connector
- SWD header for external debugger
- 2x 20-pin GPIO connector
Hardware
********
The STM32U585xx devices are an ultra-low-power microcontrollers family (STM32U5
Series) based on the high-performance Arm |reg| Cortex |reg| -M33 32-bit RISC core.
They operate at a frequency of up to 160 MHz.
More information about STM32U585CI can be found here:
- `STM32U585CI website`_
- `STM32U5 reference manual`_
Supported Features
==================
.. zephyr:board-supported-hw::
Pin Mapping
===========
Default Zephyr Peripheral Mapping:
----------------------------------
- USER_LED : PC13
- USER_PB : PA0
- USB DM/DP : PA11/PA12 (USB CDC ACM)
- UART : RX/TX - PA10/PA9
- LPUART : RX/TX - PA3/PA2
- I2C1 : SCL/SDA - PB6/PB3
- I2C2 : SCL/SDA - PB10/PB14
- SPI1 : SCK/MISO/MOSI/NSS - PA1/PA6/PA7/PA4
- FDCAN : RX/TX - PB8/PB9
System Clock
============
The STM32U585CI 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
160MHz, driven by 25MHz external clock.
Serial Port (USB CDC ACM)
=========================
The Zephyr console output is assigned to the USB CDC ACM virtual serial port.
Virtual COM port interface. Default communication settings are 115200 8N1.
Programming and Debugging
*************************
.. zephyr:board-supported-runners::
The ``blackpill_u585ci`` board facilitates firmware flashing via the USB DFU
bootloader. This method simplifies the process of updating images, although
it doesn't provide debugging capabilities. However, the board provides header
pins for the Serial Wire Debug (SWD) interface, which can be used to connect
an external debugger, such as ST-Link.
Flashing
========
To activate the bootloader, follow these steps:
1. Press and hold the BOOT0 key.
2. While still holding the BOOT0 key, press and release the RESET key.
3. Wait for 0.5 seconds, then release the BOOT0 key.
Upon successful execution of these steps, the device will transition into
bootloader mode and present itself as a USB DFU Mode device. You can program
the device using the west tool or the STM32CubeProgrammer.
Flashing an application to ``blackpill_u585ci``
-----------------------------------------------
Here is an example for the :zephyr:code-sample:`hello_world` application.
First, put the board in bootloader mode as described above. Then build and flash
the application in the usual way. Just add ``CONFIG_BOOT_DELAY=5000`` to the
configuration, so that USB CDC ACM is initialized before any text is printed,
as below:
.. zephyr-app-commands::
:zephyr-app: samples/subsys/usb/console
:board: blackpill_u585ci
:goals: build flash
:gen-args: -DCONFIG_BOOT_DELAY=5000
Run a serial host program to connect with your board:
.. code-block:: console
$ minicom -D <tty_device> -b 115200
Then, press the RESET button, you should see the following message after few seconds:
.. code-block:: console
Hello World! arm
Replace :code:`<tty_device>` with the port where the board can be found.
For example, under Linux, :code:`/dev/ttyACM0`.
Debugging
---------
There is support for `Black Magic Probe`_ debugger.
At minimum connect GND, SWDIO and SWCLK lines.
Here is an example for the :zephyr:code-sample:`blinky` application.
.. zephyr-app-commands::
:zephyr-app: samples/basic/blinky
:board: blackpill_u585ci
:goals: debug
References
**********
.. target-notes::
.. _Zadig:
https://zadig.akeo.ie/
.. _WeAct Github:
https://github.com/WeActStudio/WeActStudio.STM32U585Cx_CoreBoard
.. _dfu-util:
http://dfu-util.sourceforge.net/build.html
.. _STM32U585CI website:
https://www.st.com/en/microcontrollers-microprocessors/stm32u585ci.html
.. _STM32U5 reference manual:
https://www.st.com/resource/en/reference_manual/rm0456-stm32u5-series-armbased-32bit-mcus-stmicroelectronics.pdf
.. _Black Magic Probe:
https://black-magic.org/index.html