diff --git a/boards/arm/stm32g071b_disco/Kconfig.board b/boards/arm/stm32g071b_disco/Kconfig.board new file mode 100644 index 00000000000..897dcce606d --- /dev/null +++ b/boards/arm/stm32g071b_disco/Kconfig.board @@ -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 diff --git a/boards/arm/stm32g071b_disco/Kconfig.defconfig b/boards/arm/stm32g071b_disco/Kconfig.defconfig new file mode 100644 index 00000000000..195b8ecdf4f --- /dev/null +++ b/boards/arm/stm32g071b_disco/Kconfig.defconfig @@ -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 diff --git a/boards/arm/stm32g071b_disco/board.cmake b/boards/arm/stm32g071b_disco/board.cmake new file mode 100644 index 00000000000..d140927a7fe --- /dev/null +++ b/boards/arm/stm32g071b_disco/board.cmake @@ -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) + diff --git a/boards/arm/stm32g071b_disco/doc/img/stm32g071b_disco.jpg b/boards/arm/stm32g071b_disco/doc/img/stm32g071b_disco.jpg new file mode 100644 index 00000000000..e304ae62096 Binary files /dev/null and b/boards/arm/stm32g071b_disco/doc/img/stm32g071b_disco.jpg differ diff --git a/boards/arm/stm32g071b_disco/doc/index.rst b/boards/arm/stm32g071b_disco/doc/index.rst new file mode 100644 index 00000000000..86dfd35607e --- /dev/null +++ b/boards/arm/stm32g071b_disco/doc/index.rst @@ -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 diff --git a/boards/arm/stm32g071b_disco/stm32g071b_disco.dts b/boards/arm/stm32g071b_disco/stm32g071b_disco.dts new file mode 100644 index 00000000000..ea3da3c7173 --- /dev/null +++ b/boards/arm/stm32g071b_disco/stm32g071b_disco.dts @@ -0,0 +1,87 @@ +/* + * Copyright 2021 The Chromium OS Authors + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include +#include + +/ { + 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"; +}; diff --git a/boards/arm/stm32g071b_disco/stm32g071b_disco.yaml b/boards/arm/stm32g071b_disco/stm32g071b_disco.yaml new file mode 100644 index 00000000000..4f879b561f4 --- /dev/null +++ b/boards/arm/stm32g071b_disco/stm32g071b_disco.yaml @@ -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 diff --git a/boards/arm/stm32g071b_disco/stm32g071b_disco_defconfig b/boards/arm/stm32g071b_disco/stm32g071b_disco_defconfig new file mode 100644 index 00000000000..d684417dc52 --- /dev/null +++ b/boards/arm/stm32g071b_disco/stm32g071b_disco_defconfig @@ -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