I added the weak attribute to some configuration structs so users can can supply their own configuration structs (otherwise I got redeclaration linker errors). --- bsps/arm/stm32h7/console/console-usart3.c | 23 ++++++++++++++++++- bsps/arm/stm32h7/include/stm32h7xx_hal_conf.h | 8 +++++++ bsps/arm/stm32h7/include/stm32h7xx_hal_uart.h | 1 + bsps/arm/stm32h7/start/stm32h7-config.c | 11 ++++++--- bsps/arm/stm32h7/start/system_stm32h7xx.c | 6 +++++ spec/build/bsps/arm/stm32h7/bspstm32h7.yml | 2 ++ spec/build/bsps/arm/stm32h7/opth743nucleo.yml | 13 +++++++++++ 7 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 spec/build/bsps/arm/stm32h7/opth743nucleo.yml
diff --git a/bsps/arm/stm32h7/console/console-usart3.c b/bsps/arm/stm32h7/console/console-usart3.c index 6e0a10fe46..c84f6eb417 100644 --- a/bsps/arm/stm32h7/console/console-usart3.c +++ b/bsps/arm/stm32h7/console/console-usart3.c @@ -25,13 +25,33 @@ * POSSIBILITY OF SUCH DAMAGE. */ +#ifdef __rtems__ +#include <bspopts.h> +#endif + #ifdef HAVE_CONFIG_H #include "config.h" #endif #include <stm32h7/hal.h> -static const stm32h7_uart_config stm32h7_usart3_config = { +#if STM32H743ZI_NUCLEO == 1 +__attribute__((weak)) static const stm32h7_uart_config stm32h7_usart3_config = { + .gpio = { + .regs = GPIOD, + .config = { + .Pin = GPIO_PIN_8 | GPIO_PIN_9, + .Mode = GPIO_MODE_AF_PP, + .Pull = GPIO_NOPULL, + .Speed = GPIO_SPEED_FREQ_LOW, + .Alternate = GPIO_AF7_USART3 + } + }, + .irq = USART3_IRQn, + .device_index = 2 +}; +#else +__attribute__((weak)) static const stm32h7_uart_config stm32h7_usart3_config = { .gpio = { .regs = GPIOB, .config = { @@ -45,6 +65,7 @@ static const stm32h7_uart_config stm32h7_usart3_config = { .irq = USART3_IRQn, .device_index = 2 }; +#endif stm32h7_uart_context stm32h7_usart3_instance = { .uart = { diff --git a/bsps/arm/stm32h7/include/stm32h7xx_hal_conf.h b/bsps/arm/stm32h7/include/stm32h7xx_hal_conf.h index d423e4f782..7dd73075ba 100644 --- a/bsps/arm/stm32h7/include/stm32h7xx_hal_conf.h +++ b/bsps/arm/stm32h7/include/stm32h7xx_hal_conf.h @@ -21,6 +21,9 @@ #ifndef __STM32H7xx_HAL_CONF_H #define __STM32H7xx_HAL_CONF_H +#ifdef __rtems__ +#include <bspopts.h> +#endif /* __rtems__ */ #ifdef __cplusplus extern "C" { #endif @@ -103,7 +106,12 @@ * (when HSE is used as system clock source, directly or through the PLL). */ #if !defined (HSE_VALUE) +#if STM32H743ZI_NUCLEO == 1 +// HSE for the STM32H743ZI Nucleo +#define HSE_VALUE ((uint32_t)8000000) +#else #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz : FPGA case fixed to 60MHZ */ +#endif #endif /* HSE_VALUE */ #if !defined (HSE_STARTUP_TIMEOUT) diff --git a/bsps/arm/stm32h7/include/stm32h7xx_hal_uart.h b/bsps/arm/stm32h7/include/stm32h7xx_hal_uart.h index e9fecc4aa0..b171f7dac7 100644 --- a/bsps/arm/stm32h7/include/stm32h7xx_hal_uart.h +++ b/bsps/arm/stm32h7/include/stm32h7xx_hal_uart.h @@ -27,6 +27,7 @@ extern "C" { /* Includes ------------------------------------------------------------------*/ #include "stm32h7xx_hal_def.h" +#include "stm32h7xx_hal_dma.h" /** @addtogroup STM32H7xx_HAL_Driver * @{ diff --git a/bsps/arm/stm32h7/start/stm32h7-config.c b/bsps/arm/stm32h7/start/stm32h7-config.c index 874ad047db..22422f2c38 100644 --- a/bsps/arm/stm32h7/start/stm32h7-config.c +++ b/bsps/arm/stm32h7/start/stm32h7-config.c @@ -29,12 +29,17 @@ #include "config.h" #endif +#ifdef __rtems__ +#include <bspopts.h> +#endif + #include <stm32h7/hal.h> + const uint32_t stm32h7_config_pwr_regulator_voltagescaling = PWR_REGULATOR_VOLTAGE_SCALE0; -const RCC_OscInitTypeDef stm32h7_config_oscillator = { +__attribute__((weak)) const RCC_OscInitTypeDef stm32h7_config_oscillator = { .OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_HSI48, .HSEState = RCC_HSE_ON, @@ -54,7 +59,7 @@ const RCC_OscInitTypeDef stm32h7_config_oscillator = { .PLL.PLLFRACN = 0 }; -const RCC_ClkInitTypeDef stm32h7_config_clocks = { +__attribute__((weak)) const RCC_ClkInitTypeDef stm32h7_config_clocks = { .ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2 | RCC_CLOCKTYPE_D3PCLK1 | RCC_CLOCKTYPE_D1PCLK1, @@ -69,7 +74,7 @@ const RCC_ClkInitTypeDef stm32h7_config_clocks = { const uint32_t stm32h7_config_flash_latency = FLASH_LATENCY_4; -const RCC_PeriphCLKInitTypeDef stm32h7_config_peripheral_clocks = { +__attribute__((weak)) const RCC_PeriphCLKInitTypeDef stm32h7_config_peripheral_clocks = { .PeriphClockSelection = RCC_PERIPHCLK_RTC | RCC_PERIPHCLK_USART3 | RCC_PERIPHCLK_FDCAN | RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_USB | RCC_PERIPHCLK_FMC | RCC_PERIPHCLK_RNG, diff --git a/bsps/arm/stm32h7/start/system_stm32h7xx.c b/bsps/arm/stm32h7/start/system_stm32h7xx.c index 092d853720..65c5a65ef0 100644 --- a/bsps/arm/stm32h7/start/system_stm32h7xx.c +++ b/bsps/arm/stm32h7/start/system_stm32h7xx.c @@ -48,10 +48,16 @@ #include "stm32h7xx.h" #include <math.h> #ifdef __rtems__ +#include <bspopts.h> #include <bsp/linker-symbols.h> #endif /* __rtems__ */ + #if !defined (HSE_VALUE) +#if STM32H743ZI_NUCLEO +#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ +#else #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ +#endif #endif /* HSE_VALUE */ #if !defined (CSI_VALUE) diff --git a/spec/build/bsps/arm/stm32h7/bspstm32h7.yml b/spec/build/bsps/arm/stm32h7/bspstm32h7.yml index 835247316c..cd3446d1d4 100644 --- a/spec/build/bsps/arm/stm32h7/bspstm32h7.yml +++ b/spec/build/bsps/arm/stm32h7/bspstm32h7.yml @@ -244,6 +244,8 @@ links: uid: ../../optconsolebaud - role: build-dependency uid: ../../optconsoleirq +- role: build-dependency + uid: opth743nucleo - role: build-dependency uid: ../grp - role: build-dependency diff --git a/spec/build/bsps/arm/stm32h7/opth743nucleo.yml b/spec/build/bsps/arm/stm32h7/opth743nucleo.yml new file mode 100644 index 0000000000..3e68455893 --- /dev/null +++ b/spec/build/bsps/arm/stm32h7/opth743nucleo.yml @@ -0,0 +1,13 @@ +actions: +- get-boolean: null +- define-condition: null +build-type: option +default: false +default-by-variant: [] +enabled-by: true +format: '{}' +links: [] +name: STM32H743ZI_NUCLEO +description: | + Nucleo board. Use 8 MHz HSE external clock. +type: build -- 2.25.1 >From 4e2645f7586508b0f68e2fb19f888e92d4ac5530 Mon Sep 17 00:00:00 2001 From: "Robin.Mueller" <robin.muelle...@gmail.com> Date: Mon, 4 Jan 2021 16:00:46 +0100 Subject: [PATCH 2/3] functions made public --- bsps/arm/stm32h7/console/console-usart3.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bsps/arm/stm32h7/console/console-usart3.c b/bsps/arm/stm32h7/console/console-usart3.c index c84f6eb417..555669436e 100644 --- a/bsps/arm/stm32h7/console/console-usart3.c +++ b/bsps/arm/stm32h7/console/console-usart3.c @@ -36,7 +36,7 @@ #include <stm32h7/hal.h> #if STM32H743ZI_NUCLEO == 1 -__attribute__((weak)) static const stm32h7_uart_config stm32h7_usart3_config = { +__attribute__((weak)) const stm32h7_uart_config stm32h7_usart3_config = { .gpio = { .regs = GPIOD, .config = { @@ -51,7 +51,7 @@ __attribute__((weak)) static const stm32h7_uart_config stm32h7_usart3_config = { .device_index = 2 }; #else -__attribute__((weak)) static const stm32h7_uart_config stm32h7_usart3_config = { +__attribute__((weak)) const stm32h7_uart_config stm32h7_usart3_config = { .gpio = { .regs = GPIOB, .config = { -- 2.25.1 >From 0cb2f4f4deb0015f96866bc00869095b2e637437 Mon Sep 17 00:00:00 2001 From: "Robin.Mueller" <robin.muelle...@gmail.com> Date: Mon, 4 Jan 2021 16:04:03 +0100 Subject: [PATCH 3/3] better help output --- spec/build/bsps/arm/stm32h7/opth743nucleo.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/build/bsps/arm/stm32h7/opth743nucleo.yml b/spec/build/bsps/arm/stm32h7/opth743nucleo.yml index 3e68455893..2c4176bf00 100644 --- a/spec/build/bsps/arm/stm32h7/opth743nucleo.yml +++ b/spec/build/bsps/arm/stm32h7/opth743nucleo.yml @@ -9,5 +9,5 @@ format: '{}' links: [] name: STM32H743ZI_NUCLEO description: | - Nucleo board. Use 8 MHz HSE external clock. + Nucleo board. Use 8 MHz HSE external clock and different pins for the UART console. type: build -- 2.25.1 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel