From 19d1ea2646c2d0dcbf11a2492894211c1c55d36a Mon Sep 17 00:00:00 2001 From: Filip Brozovic Date: Fri, 8 Nov 2019 12:18:35 +0100 Subject: [PATCH] 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 --- boards/arm/stm32g0316_disco/CMakeLists.txt | 7 + boards/arm/stm32g0316_disco/Kconfig.board | 8 ++ boards/arm/stm32g0316_disco/Kconfig.defconfig | 18 +++ boards/arm/stm32g0316_disco/board.cmake | 4 + .../doc/img/stm32g0316-disco.jpg | Bin 0 -> 46484 bytes boards/arm/stm32g0316_disco/doc/index.rst | 132 ++++++++++++++++++ boards/arm/stm32g0316_disco/pinmux.c | 36 +++++ .../arm/stm32g0316_disco/stm32g0316_disco.dts | 46 ++++++ .../stm32g0316_disco/stm32g0316_disco.yaml | 13 ++ .../stm32g0316_disco_defconfig | 42 ++++++ drivers/pinmux/stm32/pinmux_stm32g0.h | 2 + 11 files changed, 308 insertions(+) create mode 100644 boards/arm/stm32g0316_disco/CMakeLists.txt create mode 100644 boards/arm/stm32g0316_disco/Kconfig.board create mode 100644 boards/arm/stm32g0316_disco/Kconfig.defconfig create mode 100644 boards/arm/stm32g0316_disco/board.cmake create mode 100644 boards/arm/stm32g0316_disco/doc/img/stm32g0316-disco.jpg create mode 100644 boards/arm/stm32g0316_disco/doc/index.rst create mode 100644 boards/arm/stm32g0316_disco/pinmux.c create mode 100644 boards/arm/stm32g0316_disco/stm32g0316_disco.dts create mode 100644 boards/arm/stm32g0316_disco/stm32g0316_disco.yaml create mode 100644 boards/arm/stm32g0316_disco/stm32g0316_disco_defconfig diff --git a/boards/arm/stm32g0316_disco/CMakeLists.txt b/boards/arm/stm32g0316_disco/CMakeLists.txt new file mode 100644 index 00000000000..d1b8108cfed --- /dev/null +++ b/boards/arm/stm32g0316_disco/CMakeLists.txt @@ -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() diff --git a/boards/arm/stm32g0316_disco/Kconfig.board b/boards/arm/stm32g0316_disco/Kconfig.board new file mode 100644 index 00000000000..3f00f126fe3 --- /dev/null +++ b/boards/arm/stm32g0316_disco/Kconfig.board @@ -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 diff --git a/boards/arm/stm32g0316_disco/Kconfig.defconfig b/boards/arm/stm32g0316_disco/Kconfig.defconfig new file mode 100644 index 00000000000..d7b2618acef --- /dev/null +++ b/boards/arm/stm32g0316_disco/Kconfig.defconfig @@ -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 diff --git a/boards/arm/stm32g0316_disco/board.cmake b/boards/arm/stm32g0316_disco/board.cmake new file mode 100644 index 00000000000..21de9a12efd --- /dev/null +++ b/boards/arm/stm32g0316_disco/board.cmake @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: Apache-2.0 +board_runner_args(pyocd "--target=stm32g031j6mx") + +include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake) diff --git a/boards/arm/stm32g0316_disco/doc/img/stm32g0316-disco.jpg b/boards/arm/stm32g0316_disco/doc/img/stm32g0316-disco.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf372085e6f8c614a8d95d0108783f5d27709646 GIT binary patch literal 46484 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 +#include + +#include + +/* 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); diff --git a/boards/arm/stm32g0316_disco/stm32g0316_disco.dts b/boards/arm/stm32g0316_disco/stm32g0316_disco.dts new file mode 100644 index 00000000000..8db7af49442 --- /dev/null +++ b/boards/arm/stm32g0316_disco/stm32g0316_disco.dts @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2019 SEAL AG + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include + +/ { + 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"; +}; diff --git a/boards/arm/stm32g0316_disco/stm32g0316_disco.yaml b/boards/arm/stm32g0316_disco/stm32g0316_disco.yaml new file mode 100644 index 00000000000..1c777cda379 --- /dev/null +++ b/boards/arm/stm32g0316_disco/stm32g0316_disco.yaml @@ -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 diff --git a/boards/arm/stm32g0316_disco/stm32g0316_disco_defconfig b/boards/arm/stm32g0316_disco/stm32g0316_disco_defconfig new file mode 100644 index 00000000000..1bb8ff62b5f --- /dev/null +++ b/boards/arm/stm32g0316_disco/stm32g0316_disco_defconfig @@ -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 diff --git a/drivers/pinmux/stm32/pinmux_stm32g0.h b/drivers/pinmux/stm32/pinmux_stm32g0.h index 448afb4ccde..21374d39ab0 100644 --- a/drivers/pinmux/stm32/pinmux_stm32g0.h +++ b/drivers/pinmux/stm32/pinmux_stm32g0.h @@ -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 \