boards: stm32g0316-disco: add support for the ST STM32G0316-DISCO board

Add support for the ST STM32G0316-DISCO development board. This board
features an ST STM32G031J6 MCU on a breakable SO8 to DIL8 module, a user
LED and a button.

Signed-off-by: Filip Brozovic <fbrozovic@gmail.com>
This commit is contained in:
Filip Brozovic 2019-11-08 12:18:35 +01:00 committed by Carles Cufí
commit 19d1ea2646
11 changed files with 308 additions and 0 deletions

View file

@ -0,0 +1,7 @@
# SPDX-License-Identifier: Apache-2.0
if(CONFIG_PINMUX)
zephyr_library()
zephyr_library_sources(pinmux.c)
zephyr_library_include_directories(${ZEPHYR_BASE}/drivers)
endif()

View file

@ -0,0 +1,8 @@
# STM32G0316 Discovery board configuration
# Copyright (c) 2019 SEAL AG
# SPDX-License-Identifier: Apache-2.0
config BOARD_STM32G0316_DISCO
bool "STM32G0316 Discovery Development Board"
depends on SOC_STM32G031XX

View file

@ -0,0 +1,18 @@
# STM32G0316 Discovery board configuration
# Copyright (c) 2019 SEAL AG
# SPDX-License-Identifier: Apache-2.0
if BOARD_STM32G0316_DISCO
config BOARD
default "stm32g0316_disco"
if UART_CONSOLE
config UART_1
default y
endif # UART_CONSOLE
endif # BOARD_STM32G0316_DISCO

View file

@ -0,0 +1,4 @@
# SPDX-License-Identifier: Apache-2.0
board_runner_args(pyocd "--target=stm32g031j6mx")
include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake)

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View file

@ -0,0 +1,132 @@
.. _stm32g0316_disco_board:
STM32G0316-DISCO
################
Overview
********
The STM32G0316-DISCO Discovery kit helps to discover features of STM32G0 in SO8 package.
This discovery kit offers an SO8 to DIL8 module designed with the STM32G031J6 microcontroller
and allows the user to develop applications. It includes an on-board ST-LINK/V2-1 to debug
and program the embedded STM32 microcontroller.
.. image:: img/stm32g0316-disco.jpg
:width: 670px
:align: center
:alt: STM32G0316-DISCO
Hardware
********
- STM32G031J6 Arm |reg| Cortex |reg|-M0+ core-based microcontroller,
featuring 32 Kbytes of Flash memory and 8 Kbytes of SRAM, in an SO8 package
- 1 user LED
- 1 reset/user push-button
- Individual and breakable STM32 SO8 to DIL8 module
- ST-LINK Micro-B USB connector
- DIL8 socket to ease programming of the STM32 MCU
- On-board ST-LINK/V2-1 debugger/programmer
For more information about the STM32G03x SoC and the STM32G0316-DISCO board, see these ST reference documents:
- `STM32G031J6 website`_
- `STM32G031 datasheet`_
- `STM32G0x1 reference manual`_
- `STM32G0316-DISCO website`_
Supported Features
==================
The Zephyr stm32g0316_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 |
+-----------+------------+-------------------------------------+
| PINMUX | on-chip | pinmux |
+-----------+------------+-------------------------------------+
| GPIO | on-chip | gpio |
+-----------+------------+-------------------------------------+
| CLOCK | on-chip | reset and clock control |
+-----------+------------+-------------------------------------+
Other hardware features are not currently supported by the port.
The default configuration can be found in the defconfig file:
``boards/arm/stm32g0316_disco/stm32g0316_disco_defconfig``
Connections and IOs
===================
Due to the small number of I/O pins on the SO8 package, multiple die I/Os are bonded
to the same package pins to maximize the number of peripherals which can be used.
Care must be taken not to set two I/Os which are connected together to conflicting
states (e.g. both as outputs, one low, the other high).
Default Zephyr Peripheral Mapping:
----------------------------------
.. rst-class:: rst-columns
- UART_1 TX/RX : PA9/PB7 (pins 5/1)
- USER_PB : PA0 (pin 4)
- LD2 : PA12 (pin 6)
Programming and Debugging
*************************
Applications for the ``stm32g0316_disco`` board configuration can be built the
usual way (see :ref:`build_an_application` and :ref:`application_run` for more details).
Flashing
========
The STM32G0316-DISCO board includes an ST-LINK/V2-1 embedded debug tool
interface. This interface is not yet supported by the openocd version included in
the Zephyr SDK. Instead, support can be enabled on pyocd by adding "pack" support with
the following pyocd command:
.. code-block:: console
$ pyocd pack --install stm32g031j6
Flashing an application to the STM32G0316-DISCO
-----------------------------------------------
Here is an example for the :ref:`blinky-sample` application.
.. zephyr-app-commands::
:zephyr-app: samples/basic/blinky
:board: stm32g0316_disco
:goals: build flash
You should 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: stm32g0316_disco
:maybe-skip-config:
:goals: debug
.. _STM32G031J6 website:
https://www.st.com/en/microcontrollers-microprocessors/stm32g031j6.html
.. _STM32G031 datasheet:
https://www.st.com/resource/en/datasheet/stm32g031j6.pdf
.. _STM32G0x1 reference manual:
https://www.st.com/resource/en/reference_manual/dm00371828.pdf
.. _STM32G0316-DISCO website:
https://www.st.com/en/evaluation-tools/stm32g0316-disco.html

View file

@ -0,0 +1,36 @@
/*
* Copyright (c) 2019 SEAL AG
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <init.h>
#include <soc.h>
#include <pinmux/stm32/pinmux_stm32.h>
/* pin assignments for STM32G0316-DISCO board */
static const struct pin_config pinconf[] = {
#ifdef CONFIG_UART_1
{STM32_PIN_PA9, STM32G0_PINMUX_FUNC_PA9_USART1_TX},
{STM32_PIN_PB7, STM32G0_PINMUX_FUNC_PB7_USART1_RX},
#endif /* CONFIG_UART_1 */
};
static int pinmux_stm32_init(struct device *port)
{
ARG_UNUSED(port);
#ifdef CONFIG_UART_1
/* Remap PA11 to PA9 */
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
LL_SYSCFG_EnablePinRemap(LL_SYSCFG_PIN_RMP_PA11);
#endif /* CONFIG_UART_1 */
stm32_setup_pins(pinconf, ARRAY_SIZE(pinconf));
return 0;
}
SYS_INIT(pinmux_stm32_init, PRE_KERNEL_1,
CONFIG_PINMUX_STM32_DEVICE_INITIALIZATION_PRIORITY);

View file

@ -0,0 +1,46 @@
/*
* Copyright (c) 2019 SEAL AG
*
* SPDX-License-Identifier: Apache-2.0
*/
/dts-v1/;
#include <st/g0/stm32g031X6.dtsi>
/ {
model = "STMicroelectronics STM32G0316 Discovery board";
compatible = "st,stm32g0316-disco", "st,stm32g031";
aliases {
led0 = &green_led_1;
sw0 = &user_button;
};
chosen {
zephyr,console = &usart1;
zephyr,shell-uart = &usart1;
zephyr,sram = &sram0;
zephyr,flash = &flash0;
};
leds {
compatible = "gpio-leds";
green_led_1: led_2 {
gpios = <&gpioa 12 GPIO_INT_ACTIVE_LOW>;
label = "User LD2";
};
};
gpio_keys {
compatible = "gpio-keys";
user_button: button {
label = "User";
gpios = <&gpioa 0 GPIO_INT_ACTIVE_LOW>;
};
};
};
&usart1 {
current-speed = <115200>;
status = "okay";
};

View file

@ -0,0 +1,13 @@
identifier: stm32g0316_disco
name: STM32G0316-DISCO
type: mcu
arch: arm
toolchain:
- zephyr
- gnuarmemb
- xtools
ram: 8
flash: 32
supported:
- gpio
- uart

View file

@ -0,0 +1,42 @@
# Zephyr Kernel Configuration
CONFIG_ARM=y
CONFIG_SOC_SERIES_STM32G0X=y
CONFIG_SOC_STM32G031XX=y
CONFIG_CORTEX_M_SYSTICK=y
CONFIG_BOARD_STM32G0316_DISCO=y
# 64MHz system clock
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=64000000
# Kernel Options due to Low Memory (8k)
CONFIG_MAIN_STACK_SIZE=640
CONFIG_IDLE_STACK_SIZE=200
CONFIG_ISR_STACK_SIZE=512
# 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

View file

@ -16,6 +16,8 @@
#define STM32G0_PINMUX_FUNC_PA3_USART2_RX \ #define STM32G0_PINMUX_FUNC_PA3_USART2_RX \
(STM32_PINMUX_ALT_FUNC_1 | STM32_PUPDR_NO_PULL) (STM32_PINMUX_ALT_FUNC_1 | STM32_PUPDR_NO_PULL)
#define STM32G0_PINMUX_FUNC_PA9_USART1_TX \
(STM32_PINMUX_ALT_FUNC_1 | STM32_PUSHPULL_NOPULL)
#define STM32G0_PINMUX_FUNC_PB6_USART1_TX \ #define STM32G0_PINMUX_FUNC_PB6_USART1_TX \
(STM32_PINMUX_ALT_FUNC_0 | STM32_PUSHPULL_NOPULL) (STM32_PINMUX_ALT_FUNC_0 | STM32_PUSHPULL_NOPULL)
#define STM32G0_PINMUX_FUNC_PB7_USART1_RX \ #define STM32G0_PINMUX_FUNC_PB7_USART1_RX \