Skip to content

Commit

Permalink
boards: stm32g0316-disco: add support for the ST STM32G0316-DISCO board
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
fbrozovic authored and carlescufi committed Dec 18, 2019
1 parent e541e63 commit 19d1ea2
Show file tree
Hide file tree
Showing 11 changed files with 308 additions and 0 deletions.
7 changes: 7 additions & 0 deletions boards/arm/stm32g0316_disco/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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()
8 changes: 8 additions & 0 deletions boards/arm/stm32g0316_disco/Kconfig.board
Original file line number Diff line number Diff line change
@@ -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
18 changes: 18 additions & 0 deletions boards/arm/stm32g0316_disco/Kconfig.defconfig
Original file line number Diff line number Diff line change
@@ -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
4 changes: 4 additions & 0 deletions boards/arm/stm32g0316_disco/board.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# SPDX-License-Identifier: Apache-2.0
board_runner_args(pyocd "--target=stm32g031j6mx")

include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
132 changes: 132 additions & 0 deletions boards/arm/stm32g0316_disco/doc/index.rst
Original file line number Diff line number Diff line change
@@ -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
36 changes: 36 additions & 0 deletions boards/arm/stm32g0316_disco/pinmux.c
Original file line number Diff line number Diff line change
@@ -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);
46 changes: 46 additions & 0 deletions boards/arm/stm32g0316_disco/stm32g0316_disco.dts
Original file line number Diff line number Diff line change
@@ -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";
};
13 changes: 13 additions & 0 deletions boards/arm/stm32g0316_disco/stm32g0316_disco.yaml
Original file line number Diff line number Diff line change
@@ -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
42 changes: 42 additions & 0 deletions boards/arm/stm32g0316_disco/stm32g0316_disco_defconfig
Original file line number Diff line number Diff line change
@@ -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
2 changes: 2 additions & 0 deletions drivers/pinmux/stm32/pinmux_stm32g0.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
#define STM32G0_PINMUX_FUNC_PA3_USART2_RX \
(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 \
(STM32_PINMUX_ALT_FUNC_0 | STM32_PUSHPULL_NOPULL)
#define STM32G0_PINMUX_FUNC_PB7_USART1_RX \
Expand Down

0 comments on commit 19d1ea2

Please sign in to comment.