From 36d4cde2b9e3c5efe6174c0e8e1693d04cde5e60 Mon Sep 17 00:00:00 2001 From: Peter Lawrence <12226419+majbthrd@users.noreply.github.com> Date: Sun, 14 Aug 2022 12:32:58 -0500 Subject: [PATCH] add the STM32WL SUGGHZSPI to the SPI library --- cores/arduino/stm32/PinNames.h | 5 +++++ cores/arduino/stm32/PortNames.h | 3 +++ libraries/SPI/src/utility/spi_com.c | 16 ++++++++++++++++ libraries/SrcWrapper/src/stm32/pinmap.c | 3 +++ .../PeripheralPins.c | 3 +++ .../variant_generic.cpp | 5 ++++- .../variant_generic.h | 5 ++++- .../PeripheralPins.c | 3 +++ .../variant_generic.cpp | 5 ++++- .../variant_generic.h | 5 ++++- 10 files changed, 49 insertions(+), 4 deletions(-) diff --git a/cores/arduino/stm32/PinNames.h b/cores/arduino/stm32/PinNames.h index 159fcf6edc..0a459ba54c 100644 --- a/cores/arduino/stm32/PinNames.h +++ b/cores/arduino/stm32/PinNames.h @@ -249,6 +249,11 @@ typedef enum { PZ_13 = (PortZ << 4) + 0x0D, PZ_14 = (PortZ << 4) + 0x0E, PZ_15 = (PortZ << 4) + 0x0F, +#endif +#if defined SUBGHZSPI_BASE + SUBGHZSPI_MOSI = (PortSUBGHZSPI << 4) + 0x00, + SUBGHZSPI_MISO = (PortSUBGHZSPI << 4) + 0x01, + SUBGHZSPI_SCLK = (PortSUBGHZSPI << 4) + 0x02, #endif // Specific pin name PADC_BASE = PNAME_ANALOG_INTERNAL_BASE, diff --git a/cores/arduino/stm32/PortNames.h b/cores/arduino/stm32/PortNames.h index 45237226ea..48e1a53114 100644 --- a/cores/arduino/stm32/PortNames.h +++ b/cores/arduino/stm32/PortNames.h @@ -71,6 +71,9 @@ typedef enum { #endif #if defined GPIOZ_BASE PortZ, +#endif +#if defined SUBGHZSPI_BASE + PortSUBGHZSPI, #endif PortEND, LastPort = PortEND - 1 diff --git a/libraries/SPI/src/utility/spi_com.c b/libraries/SPI/src/utility/spi_com.c index 32d46261dc..08cbb06d48 100644 --- a/libraries/SPI/src/utility/spi_com.c +++ b/libraries/SPI/src/utility/spi_com.c @@ -379,6 +379,14 @@ void spi_init(spi_t *obj, uint32_t speed, spi_mode_e mode, uint8_t msb) } #endif +#if defined SUBGHZSPI_BASE + if (handle->Instance == SUBGHZSPI) { + __HAL_RCC_SUBGHZSPI_CLK_ENABLE(); + __HAL_RCC_SUBGHZSPI_FORCE_RESET(); + __HAL_RCC_SUBGHZSPI_RELEASE_RESET(); + } +#endif + HAL_SPI_Init(handle); /* In order to set correctly the SPI polarity we need to enable the peripheral */ @@ -448,6 +456,14 @@ void spi_deinit(spi_t *obj) __HAL_RCC_SPI6_CLK_DISABLE(); } #endif + +#if defined SUBGHZSPI_BASE + if (handle->Instance == SUBGHZSPI) { + __HAL_RCC_SUBGHZSPI_FORCE_RESET(); + __HAL_RCC_SUBGHZSPI_RELEASE_RESET(); + __HAL_RCC_SUBGHZSPI_CLK_DISABLE(); + } +#endif } /** diff --git a/libraries/SrcWrapper/src/stm32/pinmap.c b/libraries/SrcWrapper/src/stm32/pinmap.c index 2ffbfcb425..937c518f61 100644 --- a/libraries/SrcWrapper/src/stm32/pinmap.c +++ b/libraries/SrcWrapper/src/stm32/pinmap.c @@ -154,6 +154,9 @@ void pin_function(PinName pin, int function) uint32_t ll_pin = STM_LL_GPIO_PIN(pin); uint32_t ll_mode = 0; + /* if pin doesn't need configuring, skip it */ + if (function < 0) return; + if (pin == (PinName)NC) { Error_Handler(); } diff --git a/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/PeripheralPins.c b/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/PeripheralPins.c index 5f50c67357..223d6348b0 100644 --- a/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/PeripheralPins.c +++ b/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/PeripheralPins.c @@ -159,6 +159,7 @@ WEAK const PinMap PinMap_SPI_MOSI[] = { {PA_10, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, {PA_12, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, {PB_5, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {SUBGHZSPI_MOSI, SUBGHZSPI, -1}, {NC, NP, 0} }; #endif @@ -169,6 +170,7 @@ WEAK const PinMap PinMap_SPI_MISO[] = { {PA_6, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, {PA_11, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, {PB_4, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {SUBGHZSPI_MISO, SUBGHZSPI, -1}, {NC, NP, 0} }; #endif @@ -180,6 +182,7 @@ WEAK const PinMap PinMap_SPI_SCLK[] = { {PA_8, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, {PA_9, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, {PB_3, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {SUBGHZSPI_SCLK, SUBGHZSPI, -1}, {NC, NP, 0} }; #endif diff --git a/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/variant_generic.cpp b/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/variant_generic.cpp index cefeeb0225..582eef1f05 100644 --- a/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/variant_generic.cpp +++ b/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/variant_generic.cpp @@ -46,7 +46,10 @@ const PinName digitalPin[] = { PC_13, // D25 PC_14, // D26 PC_15, // D27 - PH_3 // D28 + PH_3, // D28 + SUBGHZSPI_MOSI, + SUBGHZSPI_MISO, + SUBGHZSPI_SCLK }; // Analog (Ax) pin number array diff --git a/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/variant_generic.h b/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/variant_generic.h index 6038da8435..eba3e531b0 100644 --- a/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/variant_generic.h +++ b/variants/STM32WLxx/WL54CCU_WL55CCU_WLE4C(8-B-C)U_WLE5C(8-B-C)U/variant_generic.h @@ -44,6 +44,9 @@ #define PC14 26 #define PC15 27 #define PH3 28 +#define PINSUBGHZSPIMOSI 29 +#define PINSUBGHZSPIMISO 30 +#define PINSUBGHZSPISCK 31 // Alternate pins number #define PA1_ALT1 (PA1 | ALT1) @@ -52,7 +55,7 @@ #define PA7_ALT1 (PA7 | ALT1) #define PB8_ALT1 (PB8 | ALT1) -#define NUM_DIGITAL_PINS 29 +#define NUM_DIGITAL_PINS 32 #define NUM_ANALOG_INPUTS 9 // On-board LED pin number diff --git a/variants/STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I/PeripheralPins.c b/variants/STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I/PeripheralPins.c index 3b3d08eea2..37d5c67baa 100644 --- a/variants/STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I/PeripheralPins.c +++ b/variants/STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I/PeripheralPins.c @@ -186,6 +186,7 @@ WEAK const PinMap PinMap_SPI_MOSI[] = { {PB_15, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, {PC_1, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_SPI2)}, {PC_3, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {SUBGHZSPI_MOSI, SUBGHZSPI, -1}, {NC, NP, 0} }; #endif @@ -198,6 +199,7 @@ WEAK const PinMap PinMap_SPI_MISO[] = { {PB_4, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, {PB_14, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, {PC_2, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {SUBGHZSPI_MISO, SUBGHZSPI, -1}, {NC, NP, 0} }; #endif @@ -211,6 +213,7 @@ WEAK const PinMap PinMap_SPI_SCLK[] = { {PB_3, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, {PB_10, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, {PB_13, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {SUBGHZSPI_SCLK, SUBGHZSPI, -1}, {NC, NP, 0} }; #endif diff --git a/variants/STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I/variant_generic.cpp b/variants/STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I/variant_generic.cpp index 92256dcf02..490676d574 100644 --- a/variants/STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I/variant_generic.cpp +++ b/variants/STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I/variant_generic.cpp @@ -60,7 +60,10 @@ const PinName digitalPin[] = { PC_13, // D39 PC_14, // D40 PC_15, // D41 - PH_3 // D42 + PH_3, // D42 + SUBGHZSPI_MOSI, + SUBGHZSPI_MISO, + SUBGHZSPI_SCLK }; // Analog (Ax) pin number array diff --git a/variants/STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I/variant_generic.h b/variants/STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I/variant_generic.h index 10fd4af5e5..f1fb1c87f7 100644 --- a/variants/STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I/variant_generic.h +++ b/variants/STM32WLxx/WL54JCI_WL55JCI_WLE4J(8-B-C)I_WLE5J(8-B-C)I/variant_generic.h @@ -58,6 +58,9 @@ #define PC14 40 #define PC15 41 #define PH3 42 +#define PINSUBGHZSPIMOSI 43 +#define PINSUBGHZSPIMISO 44 +#define PINSUBGHZSPISCK 45 // Alternate pins number #define PA1_ALT1 (PA1 | ALT1) @@ -67,7 +70,7 @@ #define PB8_ALT1 (PB8 | ALT1) #define PB9_ALT1 (PB9 | ALT1) -#define NUM_DIGITAL_PINS 43 +#define NUM_DIGITAL_PINS 46 #define NUM_ANALOG_INPUTS 12 // On-board LED pin number