boards: arm: add support for STM32G071B Discovery board

Support the ST STM32G071B Discovery board with STM32G071RBTX SoC

Tested with:
    - `samples/basic/blinky`
    - `samples/basic/button`

Flashed samples via On-Board ST-LINK with:
    - west flash

Signed-off-by: Sam Hurst <sbh1187@gmail.com>
This commit is contained in:
Sam Hurst 2021-04-16 16:37:05 -07:00 committed by Anas Nashif
commit 0f19812ce0
8 changed files with 329 additions and 0 deletions

View file

@ -0,0 +1,8 @@
# STM32G071B Discovery board configuration
# Copyright 2021 The Chromium OS Authors
# SPDX-License-Identifier: Apache-2.0
config BOARD_STM32G071B_DISCO
bool "STM32G071B Discovery Board"
depends on SOC_STM32G071XX

View file

@ -0,0 +1,11 @@
# STM32G071B Discovery board configuration
# Copyright 2021 The Chromium OS Authors
# SPDX-License-Identifier: Apache-2.0
if BOARD_STM32G071B_DISCO
config BOARD
default "stm32g071b_disco"
endif # BOARD_STM32G071B_DISCO

View file

@ -0,0 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
board_runner_args(stm32cubeprogrammer "--port=swd" "--reset=hw")
include(${ZEPHYR_BASE}/boards/common/stm32cubeprogrammer.board.cmake)

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

View file

@ -0,0 +1,162 @@
.. _stm32g071b_disco_board:
ST STM32G071B Discovery
#######################
Overview
********
The STM32G071B-DISCO Discovery board is a demonstration and development platform
for the STMicroelectronics Arm® Cortex® -M0+ core-based STM32G071RB USB Type-C™
and Power Delivery microcontroller. The STM32G071B-DISCO Discovery board is
presented with all necessary interfaces for easy connection and
interoperability with other USB Type-C™ devices. The STM32G071B-DISCO Discovery
board is intended for discovery and display of USB Type-C™ port characteristics
such as data role, power role, VBUS and IBUS monitoring. It offers an advanced
user mode when associated with the STM32CubeMonUCPD software GUI and can be used
as a USB Type-C™ and Power Delivery analyzer.
- STM32G071RBT6 microcontroller featuring 128 Kbytes of Flash memory and
32 Kbytes of RAM in LQFP64 package
- Plastic case
- 1” 128 x 64 pixels OLED LCD module with SPI interface
- USB Type-C™ interface plug cable and receptacle connector accessible by door
with reed sensor detection
- 3 bidirectional current and power monitors with I2C interface to measure VBUS,
CC1 and CC2 protected and isolated lines
- On-board DC/DC converter to sustain power supply with VBUS varying from 3 V to
20 V (+/- 5 %)
- 4 user status LEDs about USB Type-C™ configuration
- 3 LEDs for power and ST-LINK communication
- 4-way joystick with selection button
- 1 reset push-button
- Board external connectors:
- USB Type-C™ plug cable
- USB Type-C™ receptacle connector
- 8-pin user extension connector including ADC, SPI, USART and
I2C communication signals
- USB with Micro-AB (ST-LINK)
- Board internal connectors:
- 2 x 8-pin GPIOs free pins from microcontroller
(accessible internally when case is removed)
- USB Type-C™ test points for main signals
- Flexible power-supply options: ST-LINK USB VBUS or USB Type-C™ VBUS
- On-board ST-LINK/V2-1 debugger/programmer with USB enumeration capability:
mass storage, Virtual COM port and debug port
.. image:: img/stm32g071b_disco.jpg
:width: 500px
:height: 450px
:align: center
:alt: STM32G071B-DISCO
More information about the board can be found at the `STM32G071B-DISCO website`_.
More information about STM32G071RB can be found here:
- `G071RB on www.st.com`_
- `STM32G071 reference manual`_
Supported Features
==================
The Zephyr stm32g071b_disco board configuration supports the following hardware features:
+-----------+------------+-------------------------------------+
| Interface | Controller | Driver/Component |
+===========+============+=====================================+
| NVIC | on-chip | nested vector interrupt controller |
+-----------+------------+-------------------------------------+
| UART | on-chip | serial port-polling; |
| | | serial port-interrupt |
+-----------+------------+-------------------------------------+
| GPIO | on-chip | gpio |
+-----------+------------+-------------------------------------+
| WATCHDOG | on-chip | independent watchdog |
+-----------+------------+-------------------------------------+
Other hardware features are not yet supported in this Zephyr port.
The default configuration can be found in the defconfig file:
``boards/arm/stm32g071b_disco/stm32g071b_disco_defconfig``
Connections and IOs
===================
Each of the GPIO pins can be configured by software as output (push-pull or open-drain), as
input (with or without pull-up or pull-down), or as peripheral alternate function. Most of the
GPIO pins are shared with digital or analog alternate functions. All GPIOs are high current
capable except for analog inputs.
Default Zephyr Peripheral Mapping:
----------------------------------
- UART_3 TX/RX : PC10/PC11 (ST-Link Virtual Port Com)
- BUTTON (JOY_SEL) : PC0
- BUTTON (JOY_LEFT) : PC1
- BUTTON (JOY_DOWN) : PC2
- BUTTON (JOY_RIGHT) : PC3
- BUTTON (JOY_UP) : PC4
- LED (TO_REC) : PD9
- LED (TO_PLUG) : PD8
- LED (SINK_SPY) : PD5
- LED (SOURCE) : PC12
For mode details please refer to `STM32G0 Discovery board User Manual`_.
Programming and Debugging
*************************
Applications for the ``stm32g071b_disco`` board configuration can be built and
flashed in the usual way (see :ref:`build_an_application` and
:ref:`application_run` for more details).
Flashing
========
The STM32G071B Discovery board includes an ST-LINK/V2-1 embedded debug tool interface.
.. code-block:: console
$ west flash
Flashing an application to the STM32G071B_DISCO
-----------------------------------------------
Here is an example for the :ref:`blinky-sample` application.
.. zephyr-app-commands::
:zephyr-app: samples/basic/blinky
:board: stm32g071b_disco
:goals: build flash
You will see the LED blinking every second.
Debugging
=========
You can debug an application in the usual way. Here is an example for the
:ref:`hello_world` application.
.. zephyr-app-commands::
:zephyr-app: samples/hello_world
:board: stm32g071b_disco
:maybe-skip-config:
:goals: debug
References
**********
.. target-notes::
.. _STM32G071B-DISCO website:
https://www.st.com/en/evaluation-tools/stm32g071b-disco.html
.. _STM32G071 reference manual:
http://www.st.com/resource/en/reference_manual/dm00371828.pdf
.. _STM32G0 Discovery board User Manual:
https://www.st.com/resource/en/user_manual/dm00496511.pdf
.. _G071RB on www.st.com:
http://www.st.com/en/microcontrollers/stm32g071rb.html

View file

@ -0,0 +1,87 @@
/*
* Copyright 2021 The Chromium OS Authors
*
* SPDX-License-Identifier: Apache-2.0
*/
/dts-v1/;
#include <st/g0/stm32g071Xb.dtsi>
#include <st/g0/stm32g071r(6-8-b)tx-pinctrl.dtsi>
/ {
model = "STM32G071B DEMO board";
compatible = "st,stm32g071-demo";
chosen {
zephyr,console = &usart3;
zephyr,shell-uart = &usart3;
zephyr,sram = &sram0;
zephyr,flash = &flash0;
};
leds {
compatible = "gpio-leds";
red_led_4: led4 {
gpios = <&gpiod 9 GPIO_ACTIVE_HIGH>;
label = "TO_REC";
};
red_led_5: led5 {
gpios = <&gpiod 8 GPIO_ACTIVE_HIGH>;
label = "TO_PLUG";
};
green_led_6: led6 {
gpios = <&gpiod 5 GPIO_ACTIVE_HIGH>;
label = "SINK_SPY";
};
green_led_7: led7 {
gpios = <&gpioc 12 GPIO_ACTIVE_HIGH>;
label = "SOURCE";
};
};
gpio_keys {
compatible = "gpio-keys";
joy_sel: button0 {
label = "JOY_SEL";
gpios = <&gpioc 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>;
};
joy_left: button1 {
label = "JOY_LEFT";
gpios = <&gpioc 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>;
};
joy_down: button2 {
label = "JOY_DOWN";
gpios = <&gpioc 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>;
};
joy_right: button3 {
label = "JOY_RIGHT";
gpios = <&gpioc 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>;
};
joy_up: button4 {
label = "JOY_UP";
gpios = <&gpioc 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>;
};
};
aliases {
led0 = &red_led_4;
led1 = &red_led_5;
led2 = &green_led_6;
led3 = &green_led_7;
sw0 = &joy_sel;
sw1 = &joy_left;
sw2 = &joy_down;
sw3 = &joy_right;
sw4 = &joy_up;
};
};
&usart3 {
pinctrl-0 = <&usart3_tx_pc10 &usart3_rx_pc11>;
current-speed = <115200>;
status = "okay";
};
&iwdg {
status = "okay";
};

View file

@ -0,0 +1,14 @@
identifier: stm32g071b_disco
name: ST STM32G071B Discovery
type: mcu
arch: arm
toolchain:
- zephyr
- gnuarmemb
- xtools
ram: 36
flash: 128
supported:
- uart
- gpio
- watchdog

View file

@ -0,0 +1,41 @@
# Copyright 2021 The Chromium OS Authors
#
# SPDX-License-Identifier: Apache-2.0
CONFIG_SOC_SERIES_STM32G0X=y
CONFIG_SOC_STM32G071XX=y
# 64MHz system clock
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=64000000
# Serial Drivers
CONFIG_SERIAL=y
CONFIG_UART_INTERRUPT_DRIVEN=y
# enable console
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
# Pinmux Driver
CONFIG_PINMUX=y
# GPIO Controller
CONFIG_GPIO=y
# Clock configuration
CONFIG_CLOCK_CONTROL=y
# SYSCLK selection
CONFIG_CLOCK_STM32_SYSCLK_SRC_PLL=y
# PLL configuration
CONFIG_CLOCK_STM32_PLL_SRC_HSI=y
# produce 64MHz clock at PLL output
CONFIG_CLOCK_STM32_PLL_M_DIVISOR=1
CONFIG_CLOCK_STM32_PLL_N_MULTIPLIER=8
CONFIG_CLOCK_STM32_PLL_P_DIVISOR=2
CONFIG_CLOCK_STM32_PLL_Q_DIVISOR=2
CONFIG_CLOCK_STM32_PLL_R_DIVISOR=2
CONFIG_CLOCK_STM32_AHB_PRESCALER=1
CONFIG_CLOCK_STM32_APB1_PRESCALER=1