boards: add support for stm32f401_mini

Adds support for the stm32f401cc based stm32 mini f401 board.

Signed-off-by: Brian Bradley <brian.bradley.p@gmail.com>
This commit is contained in:
Brian Bradley 2022-03-02 11:36:55 -05:00 committed by Maureen Helm
commit 5ae78fbca5
10 changed files with 383 additions and 0 deletions

View file

@ -0,0 +1,8 @@
# Copyright (c) 2022 Brian Bradley
# SPDX-License-Identifier: Apache-2.0
# STM32 Mini F401 Board
config BOARD_STM32F401_MINI
bool "STM32 Mini F401 Board"
depends on SOC_STM32F401XC

View file

@ -0,0 +1,15 @@
# Copyright (c) 2022 Brian Bradley
# SPDX-License-Identifier: Apache-2.0
# STM32 Mini F401 board definitions
if BOARD_STM32F401_MINI
config BOARD
default "stm32f401_mini"
config SPI_STM32_INTERRUPT
default y
depends on SPI
endif # BOARD_STM32F401_MINI

View file

@ -0,0 +1,9 @@
# SPDX-License-Identifier: Apache-2.0
board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse")
board_runner_args(jlink "--device=STM32F401CC" "--speed=4000")
include(${ZEPHYR_BASE}/boards/common/dfu-util.board.cmake)
include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake)

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 KiB

View file

@ -0,0 +1,154 @@
.. _stm32f401_mini:
STM32 Mini F401
###############
Overview
********
The STM32 Mini F401 is an extremely low cost and bare-bones
development board featuring the STM32F401CC, see `STM32F401CC website`_.
More info about the board with schematics available `here <stm32-base-board-page>`_
.. image:: img/STM32_Mini_F401-1.jpg
:align: center
:alt: STM32 Mini F401
Hardware
********
The STM32F401CC based board provides the following
hardware components:
- STM32F401CCU6 in UFQFPN48 package
- ARM |reg| 32-bit Cortex |reg| -M4 CPU with FPU
- 84 MHz max CPU frequency
- VDD from 1.7 V to 3.6 V
- 256 KB Flash
- 64 KB SRAM
- GPIO with external interrupt capability
- 1x12-bit, 2.4 MSPS ADC with 16 channels
- DMA Controller
- Up to 11 Timers (six 16-bit, two 32-bit, two watchdog timers and a SysTick timer)
- USART/UART (3)
- I2C (3)
- SPI/I2S (4)
- SDIO
- USB 2.0 full-speed device/host/OTG controller with on-chip PHY
- CRC calculation unit
- 96-bit unique ID
- RTC
Supported Features
==================
The Zephyr stm32f401_mini board configuration supports the following
hardware features:
+------------+------------+-------------------------------------+
| Interface | Controller | Driver/Component |
+============+============+=====================================+
| NVIC | on-chip | nested vector interrupt controller |
+------------+------------+-------------------------------------+
| SYSTICK | on-chip | system clock |
+------------+------------+-------------------------------------+
| UART | on-chip | serial port |
+------------+------------+-------------------------------------+
| GPIO | on-chip | gpio |
+------------+------------+-------------------------------------+
| PINMUX | on-chip | pinmux |
+------------+------------+-------------------------------------+
| FLASH | on-chip | flash |
+------------+------------+-------------------------------------+
| SPI | on-chip | spi |
+------------+------------+-------------------------------------+
| I2C | on-chip | i2c |
+------------+------------+-------------------------------------+
| ADC | on-chip | ADC Controller |
+------------+------------+-------------------------------------+
| USB OTG FS | on-chip | USB device |
+------------+------------+-------------------------------------+
The default configuration can be found in the defconfig file:
``boards/arm/stm32f401_mini/stm32f401_mini_defconfig``
Default Zephyr Peripheral Mapping:
----------------------------------
- UART_1 TX/RX : PA9/PA10
- I2C1 SCL/SDA : PB8/PB9
- SPI1 CS/SCK/MISO/MOSI : PA4/PA5/PA6/PA7
- PWM_4_CH1 : PB6
- PWM_4_CH2 : PB7
- ADC_1 : PA1
- SW0 : PB2 (routed to BOOT1 dip switch)
- LED0 : PC13
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 25 MHz.
The default configuration sources the system clock from the PLL, which is
derived from HSE, and is set at 84MHz.
Programming and Debugging
*************************
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, which on this board
is a dip switch.
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 setting the BOOT0 dip switch position to ON. Reset the board with the NRST button.
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: stm32f401_mini
: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::
.. _Zadig:
https://zadig.akeo.ie/
.. _stm32-base-board-page:
https://stm32-base.org/boards/STM32F401CCU6-STM32-Mini-F401
.. _dfu-util:
http://dfu-util.sourceforge.net/build.html
.. _STM32F401CC website:
https://www.st.com/en/microcontrollers-microprocessors/stm32f401cc.html

View file

@ -0,0 +1,137 @@
/*
* Copyright (c) 2022 Brian Bradley (brian.bradley.p@gmail.com)
*
* SPDX-License-Identifier: Apache-2.0
*/
/dts-v1/;
#include <st/f4/stm32f401Xc.dtsi>
#include <st/f4/stm32f401c(b-c)ux-pinctrl.dtsi>
/ {
model = "STM32 Mini F401";
compatible = "stm32f401_mini";
chosen {
zephyr,console = &usart1;
zephyr,shell-uart = &usart1;
zephyr,sram = &sram0;
zephyr,flash = &flash0;
};
leds {
compatible = "gpio-leds";
user_led: led {
gpios = <&gpioc 13 GPIO_ACTIVE_LOW>;
label = "User LED";
};
};
gpio_keys {
compatible = "gpio-keys";
boot1: button {
label = "BOOT1";
gpios = <&gpiob 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
};
};
aliases {
led0 = &user_led;
sw0 = &boot1;
};
};
&flash0 {
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
boot_partition: partition@0 {
label = "mcuboot";
reg = <0x00000000 0x00010000>;
read-only;
};
slot0_partition: partition@20000 {
label = "image-0";
reg = <0x00020000 0x00020000>;
};
slot1_partition: partition@40000 {
label = "image-1";
reg = <0x00040000 0x00020000>;
};
scratch_partition: partition@60000 {
label = "image-scratch";
reg = <0x00060000 0x00020000>;
};
};
};
&timers4 {
status = "okay";
pwm4: pwm {
status = "okay";
pinctrl-0 = <&tim4_ch1_pb6 &tim4_ch2_pb7>;
pinctrl-names = "default";
};
};
&usart1 {
pinctrl-0 = <&usart1_tx_pa9 &usart1_rx_pa10>;
pinctrl-names = "default";
status = "okay";
current-speed = <115200>;
};
&i2c1 {
pinctrl-0 = <&i2c1_scl_pb8 &i2c1_sda_pb9>;
pinctrl-names = "default";
status = "okay";
clock-frequency = <I2C_BITRATE_FAST>;
};
&spi1 {
pinctrl-0 = <&spi1_sck_pa5 &spi1_nss_pa4
&spi1_miso_pa6 &spi1_mosi_pa7>;
pinctrl-names = "default";
status = "okay";
};
&rtc {
status = "okay";
};
zephyr_udc0: &usbotg_fs {
pinctrl-0 = <&usb_otg_fs_dm_pa11 &usb_otg_fs_dp_pa12>;
pinctrl-names = "default";
status = "okay";
};
&adc1 {
pinctrl-0 = <&adc1_in1_pa1>;
pinctrl-names = "default";
status = "okay";
};
&clk_hse {
clock-frequency = <DT_FREQ_M(25)>;
status = "okay";
};
&pll {
div-m = <25>;
mul-n = <336>;
div-p = <4>;
div-q = <7>;
clocks = <&clk_hse>;
status = "okay";
};
&rcc {
clocks = <&pll>;
clock-frequency = <DT_FREQ_M(84)>;
ahb-prescaler = <1>;
apb1-prescaler = <2>;
apb2-prescaler = <1>;
};

View file

@ -0,0 +1,16 @@
identifier: stm32f401_mini
name: STM32 Mini F401
type: mcu
arch: arm
toolchain:
- zephyr
- gnuarmemb
- xtools
supported:
- counter
- spi
- usb
- i2c
- uart
- pwm
- adc

View file

@ -0,0 +1,25 @@
# SPDX-License-Identifier: Apache-2.0
CONFIG_SOC_SERIES_STM32F4X=y
CONFIG_SOC_STM32F401XC=y
# 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
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
# Enable GPIO
CONFIG_GPIO=y
# Clock configuration
CONFIG_CLOCK_CONTROL=y
# enable pin controller
CONFIG_PINCTRL=y

View file

@ -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
}

View file

@ -211,6 +211,7 @@
#elif defined(CONFIG_BOARD_NUCLEO_L476RG) || \ #elif defined(CONFIG_BOARD_NUCLEO_L476RG) || \
defined(CONFIG_BOARD_BLACKPILL_F411CE) || \ defined(CONFIG_BOARD_BLACKPILL_F411CE) || \
defined(CONFIG_BOARD_STM32F401_MINI) || \
defined(CONFIG_BOARD_BLACKPILL_F401CE) || \ defined(CONFIG_BOARD_BLACKPILL_F401CE) || \
defined(CONFIG_BOARD_NUCLEO_L4R5ZI) || \ defined(CONFIG_BOARD_NUCLEO_L4R5ZI) || \
defined(CONFIG_BOARD_MIKROE_CLICKER_2) defined(CONFIG_BOARD_MIKROE_CLICKER_2)