Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Flipper-Zero/STM32CubeWB.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/Core/Src/gpio_lld.c')
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/Core/Src/gpio_lld.c726
1 files changed, 726 insertions, 0 deletions
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/Core/Src/gpio_lld.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/Core/Src/gpio_lld.c
new file mode 100644
index 000000000..fe5788ff9
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/Phy_802_15_4/Phy_802_15_4_Cli/Core/Src/gpio_lld.c
@@ -0,0 +1,726 @@
+/**
+ ******************************************************************************
+ * @file gpio_lld.c
+ * @author MCD Application Team
+ * @version $VERSION$
+ * @date $DATE$
+ * @brief This file contains the init of all the GPIOs used by LLD tests.
+ * It is to be used on both M0 and M4.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+// Be carrefull with the .h included as this file must be compilable on both M0 and M4 environments
+#include "app_conf.h"
+#include "gpio_lld.h"
+
+/* Initialize GPIOs fused by PHY valid CLI */
+void gpio_lld_phy_init(void) {
+ GPIO_InitTypeDef GPIO_InitStruct;
+
+ /* Enable clock(s) for GPIOs */
+#ifdef CORE_CM4
+ // Enable GPIO clocks for M4 use
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+#ifdef STM32WB35xx
+#else
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+#endif
+#ifdef USE_SIMU
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_GPIOD_CLK_ENABLE();
+#endif
+#else
+ // Enable GPIO clocks for M0 use
+ __HAL_RCC_C2GPIOA_CLK_ENABLE();
+ __HAL_RCC_C2GPIOB_CLK_ENABLE();
+#ifdef STM32WB35xx
+#else
+ __HAL_RCC_C2GPIOC_CLK_ENABLE();
+#endif
+#ifdef USE_SIMU
+ __HAL_RCC_C2GPIOB_CLK_ENABLE();
+ __HAL_RCC_C2GPIOC_CLK_ENABLE();
+ __HAL_RCC_C2GPIOD_CLK_ENABLE();
+#endif
+#endif
+
+#if defined (USE_SIMU)
+ // Initialize GPIO used to detect if current DORY is master or slave
+ // 4 GPIOs are needed while only one is enougth but this must be kept as it is
+ // because this is also used by tests which are not managed by MDG-RF
+ GPIO_InitStruct.Pin = (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+ GPIO_InitStruct.Pull = GPIO_PULLUP;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH ;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+ // Initialize GPIOs used to have both DORYs communicating over
+ // 13 bits of the port C and D which are cross connected in SIMU test bench
+ GPIO_InitStruct.Pin = (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13);
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH ;
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13);
+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+ GPIO_InitStruct.Pull = GPIO_PULLUP;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH ;
+ HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
+#endif
+
+ // configure the GPIO to be set to '1' during frame TX
+ GPIO_InitStruct.Pin = (GPIO_TX_PIN);
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ HAL_GPIO_Init(GPIO_TX_PORT, &GPIO_InitStruct);
+ gpio_lld_phy_gpioTx_down();
+
+ // configure the GPIO to be set to '1' during HardFault'
+ GPIO_InitStruct.Pin = (GPIO_HARD_FAULT_PIN);
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ HAL_GPIO_Init(GPIO_HARD_FAULT_PORT, &GPIO_InitStruct);
+ gpio_lld_phy_gpioHardFault_down();
+
+ // configure 2 GPIOs that can be used for debug purposes
+ GPIO_InitStruct.Pin = (GPIO_1_PIN);
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ HAL_GPIO_Init(GPIO_1_PORT, &GPIO_InitStruct);
+ gpio_lld_phy_gpio1_down();
+#if !defined (USE_SIMU) && !defined (USE_FPGA)
+ GPIO_InitStruct.Pin = (GPIO_2_PIN);
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ HAL_GPIO_Init(GPIO_2_PORT, &GPIO_InitStruct);
+ gpio_lld_phy_gpio2_down();
+#endif
+}
+
+/* Set PHY GPIO_TX to '1' */
+void gpio_lld_phy_gpioTx_up(void) {
+ HAL_GPIO_WritePin(GPIO_TX_PORT, GPIO_TX_PIN, GPIO_PIN_SET);
+}
+
+/* Set PHY GPIO_TX to '0' */
+void gpio_lld_phy_gpioTx_down(void) {
+ HAL_GPIO_WritePin(GPIO_TX_PORT, GPIO_TX_PIN, GPIO_PIN_RESET);
+}
+
+/* Set PHY GPIO_HARD_FAULT to '1' */
+void gpio_lld_phy_gpioHardFault_up(void) {
+ HAL_GPIO_WritePin(GPIO_HARD_FAULT_PORT, GPIO_HARD_FAULT_PIN, GPIO_PIN_SET);
+}
+
+/* Set PHY GPIO_HARD_FAULT to '0' */
+void gpio_lld_phy_gpioHardFault_down(void) {
+ HAL_GPIO_WritePin(GPIO_HARD_FAULT_PORT, GPIO_HARD_FAULT_PIN, GPIO_PIN_RESET);
+}
+
+/* Set PHY GPIO_1 to '1' */
+void gpio_lld_phy_gpio1_up(void) {
+ HAL_GPIO_WritePin(GPIO_1_PORT, GPIO_1_PIN, GPIO_PIN_SET);
+}
+
+/* Set PHY GPIO_1 to '0' */
+void gpio_lld_phy_gpio1_down(void) {
+ HAL_GPIO_WritePin(GPIO_1_PORT, GPIO_1_PIN, GPIO_PIN_RESET);
+}
+
+/* Set PHY GPIO_2 to '1' */
+void gpio_lld_phy_gpio2_up(void) {
+ HAL_GPIO_WritePin(GPIO_2_PORT, GPIO_2_PIN, GPIO_PIN_SET);
+}
+
+/* Set PHY GPIO_2 to '0' */
+void gpio_lld_phy_gpio2_down(void) {
+ HAL_GPIO_WritePin(GPIO_2_PORT, GPIO_2_PIN, GPIO_PIN_RESET);
+}
+
+/* De-initialize GPIOs fused by PHY valid CLI */
+void gpio_lld_phy_deInit(void) {
+ HAL_GPIO_DeInit(GPIO_TX_PORT, GPIO_TX_PIN);
+ HAL_GPIO_DeInit(GPIO_HARD_FAULT_PORT, GPIO_HARD_FAULT_PIN);
+ HAL_GPIO_DeInit(GPIO_1_PORT, GPIO_1_PIN);
+ HAL_GPIO_DeInit(GPIO_2_PORT, GPIO_2_PIN);
+}
+
+/* Initialize GPIOs for MCO use */
+void gpio_lld_mco_init(uint32_t mcoSource, uint32_t mcoDiv) {
+ GPIO_InitTypeDef GPIO_InitStruct;
+
+ //HAL_RCC_MCOConfig(RCC_MCO3, mcoSource, mcoDiv);
+ LL_RCC_ConfigMCO(mcoSource, mcoDiv);
+
+ /* Enable clock(s) for GPIOs */
+#ifdef CORE_CM4
+ // Enable GPIO clocks for M4 use
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+#else
+ // Enable GPIO clocks for M0 use
+ __HAL_RCC_C2GPIOA_CLK_ENABLE();
+#endif
+
+ // configure the GPIO PA15 in AF6 to be used as MCO
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF6_MCO;
+ GPIO_InitStruct.Pin = GPIO_MCO_PIN;
+ HAL_GPIO_Init(GPIO_MCO_PORT, &GPIO_InitStruct);
+}
+
+/* De-initialize GPIOs for external PA use */
+void gpio_lld_mco_deInit(void) {
+ HAL_GPIO_DeInit(GPIO_MCO_PORT, GPIO_MCO_PIN);
+ //HAL_RCC_MCOConfig(RCC_MCO3, RCC_MCO1SOURCE_NOCLOCK, RCC_MCODIV_1);
+ LL_RCC_ConfigMCO(RCC_MCO1SOURCE_NOCLOCK, RCC_MCODIV_1);
+}
+
+/* Initialize GPIOs for external PA use */
+void gpio_lld_extPa_init(void) {
+ GPIO_InitTypeDef GPIO_InitStruct;
+
+ /* Enable clock(s) for GPIOs */
+#ifdef CORE_CM4
+ // Enable GPIO clocks for M4 use
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+#else
+ // Enable GPIO clocks for M0 use
+ __HAL_RCC_C2GPIOB_CLK_ENABLE();
+#endif
+
+ // configure the GPIO PB0 in AF6 to be used as RF_TX_MOD_EXT_PA
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF6_RF_DTB0;
+ GPIO_InitStruct.Pin = GPIO_EXT_PA_TX_PIN;
+ HAL_GPIO_Init(GPIO_EXT_PA_TX_PORT, &GPIO_InitStruct);
+
+ // configure the GPIO which will be managed by M0 stack to enable Ext PA
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Pin = GPIO_EXT_PA_EN_PIN;
+ HAL_GPIO_Init(GPIO_EXT_PA_EN_PORT, &GPIO_InitStruct);
+}
+
+/* De-initialize GPIOs for external PA use */
+void gpio_lld_extPa_deInit(void) {
+ HAL_GPIO_DeInit(GPIO_EXT_PA_TX_PORT, GPIO_EXT_PA_TX_PIN);
+ HAL_GPIO_DeInit(GPIO_EXT_PA_EN_PORT, GPIO_EXT_PA_EN_PIN);
+}
+
+/* Set EXT PA EN to '1' */
+void gpio_lld_phy_extPaEn_up(void) {
+ HAL_GPIO_WritePin(GPIO_EXT_PA_EN_PORT, GPIO_EXT_PA_EN_PIN, GPIO_PIN_SET);
+}
+
+/* Set EXT PA EN to '0' */
+void gpio_lld_phy_extPaEn_down(void) {
+ HAL_GPIO_WritePin(GPIO_EXT_PA_EN_PORT, GPIO_EXT_PA_EN_PIN, GPIO_PIN_RESET);
+}
+
+#ifdef USE_SIMU
+/* Initialize GPIOs for master DORY of the SIMU */
+void gpio_lld_SimuMaster_init(void) {
+ GPIO_InitTypeDef GPIO_InitStruct;
+
+ /* Enable clock(s) for GPIOs */
+#ifdef CORE_CM4
+ // Enable GPIO clocks for M4 use
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+#else
+ // Enable GPIO clocks for M0 use
+ __HAL_RCC_C2GPIOA_CLK_ENABLE();
+ __HAL_RCC_C2GPIOB_CLK_ENABLE();
+#endif
+
+ // In DORY master only : initialize GPIO port A pin 0, 1 and, 2 to send CRC result to simulator
+ GPIO_InitStruct.Pin = (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2);
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+ // In DORY master only : initialize GPIO port B pin 8 and pin 9 to be used for debug purposes
+ GPIO_InitStruct.Pin = (GPIO_TX_PIN);
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH ;
+ HAL_GPIO_Init(GPIO_TX_PORT, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = (GPIO_1_PIN);
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH ;
+ HAL_GPIO_Init(GPIO_1_PORT, &GPIO_InitStruct);
+}
+
+/* Initialize GPIOs for slave DORY of the SIMU */
+void gpio_lld_SimuSlave_init(void) {
+// No GPIO to initialize in DORY slave
+}
+#endif
+
+/* Initialize GPIOs used by USART */
+void gpio_lld_usart_init(void) {
+ GPIO_InitTypeDef GPIO_InitStruct;
+
+ /* Enable clock(s) for GPIOs used by USART */
+#if USE_NEW_SET_OF_GPIO_FOR_USART
+#ifdef CORE_CM4
+ // Enable GPIO clocks for M4 use
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+#else
+ // Enable GPIO clocks for M0 use
+ __HAL_RCC_C2GPIOA_CLK_ENABLE();
+#endif
+#else
+#ifdef CORE_CM4
+ // Enable GPIO clocks for M4 use
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+#else
+ // Enable GPIO clocks for M0 use
+ __HAL_RCC_C2GPIOB_CLK_ENABLE();
+#endif
+#endif
+
+ /* USART1 GPIO Configuration
+ USART1_TX : PB6
+ USART1_RX : PB7
+ */
+#if USE_NEW_SET_OF_GPIO_FOR_USART
+ GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+#else
+ GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+#endif
+}
+
+/* De-initialize GPIOs used by USART */
+void gpio_lld_usart_deInit(void) {
+ /* USART1 GPIO Configuration
+ USART1_TX : PB6
+ USART1_RX : PB7
+ */
+#if USE_NEW_SET_OF_GPIO_FOR_USART
+ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9);
+ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_10);
+#else
+ HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6);
+ HAL_GPIO_DeInit(GPIOB, GPIO_PIN_7);
+#endif
+
+ /* Do not disable clocks as they could be used by others GPIOs and it seems to not need power in STOP mode */
+}
+
+/* Initialize GPIOs used by LPUART */
+void gpio_lld_lpuart_init(void) {
+ GPIO_InitTypeDef GPIO_InitStruct;
+
+#ifdef STM32WB35xx
+#ifdef CORE_CM4
+ // Enable GPIO clocks for M4 use
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+#else
+ // Enable GPIO clocks for M0 use
+ __HAL_RCC_C2GPIOA_CLK_ENABLE();
+ __HAL_RCC_C2GPIOB_CLK_ENABLE();
+#endif
+#else
+#ifdef CORE_CM4
+ // Enable GPIO clocks for M4 use
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+#else
+ // Enable GPIO clocks for M0 use
+ __HAL_RCC_C2GPIOC_CLK_ENABLE();
+#endif
+#endif
+
+ /* LPUART1 GPIO Configuration
+ LPUART1_TX : PB5 on Little DORY or PC1 on DORY
+ LPUART1_RX : PA3 on Little DORY or PC0 on DORY
+ */
+#ifdef STM32WB35xx
+ GPIO_InitStruct.Pin = GPIO_PIN_3;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = GPIO_PIN_5;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+#else
+ GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1;
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+#endif
+}
+
+/* De-initialize GPIOs used by LPUART */
+void gpio_lld_lpuart_deInit(void) {
+ /* LPUART1 GPIO Configuration
+ LPUART1_TX : PB5 on Little DORY PC1 on DORY
+ LPUART1_RX : PA3 on Little DORY PC0 on DORY
+ */
+#ifdef STM32WB35xx
+ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_3);
+ HAL_GPIO_DeInit(GPIOB, GPIO_PIN_5);
+#else
+ HAL_GPIO_DeInit(GPIOC, GPIO_PIN_0 | GPIO_PIN_1);
+#endif
+ /* Do not disable clocks as they could be used by others GPIOs and it seems to not need power in STOP mode */
+}
+
+#if !defined (USE_SIMU) && !defined(USE_FPGA)
+/* Initialize GPIO PA2 (for debug use only) */
+void gpio_lld_pa2_init(uint8_t mode, uint8_t speed) {
+ GPIO_InitTypeDef GPIO_InitStruct;
+
+ /* Enable clock(s) for GPIOs */
+#ifdef CORE_CM4
+ // Enable GPIO clocks for M4 use
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+#else
+ // Enable GPIO clocks for M0 use
+ __HAL_RCC_C2GPIOA_CLK_ENABLE();
+#endif
+
+ if (mode == 0) {
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1;
+ } else if (mode == 1) {
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Alternate = GPIO_AF6_RF_DTB7;
+ } else if (mode == 2) {
+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+ GPIO_InitStruct.Pull = GPIO_PULLUP;
+ } else if (mode == 3) {
+ GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ } else {
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ }
+
+ if (speed <= GPIO_SPEED_FREQ_VERY_HIGH) {
+ GPIO_InitStruct.Speed = speed;
+ } else {
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ }
+
+ GPIO_InitStruct.Pin = GPIO_PIN_2;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+}
+
+/* De-initialize GPIO PA2 (for debug use only) */
+void gpio_lld_pa2_deInit(void) {
+ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2);
+}
+
+/*
+ * Initialize GPIOs needed by DTB mode chosen (for debug use only).
+ * Only DTB0 and DTB7 configurations are coded until now.
+ * Do not forget to program the RF SPI register addr 0x30 () with the DTB cfg and DTB enable.
+ */
+void gpio_lld_dtb_init(uint8_t dtbMode) {
+ GPIO_InitTypeDef GPIO_InitStruct;
+ uint32_t usePA = 0, pinPA = 0;
+ uint32_t usePB = 0, pinPB = 0;
+ uint32_t usePC = 0, pinPC = 0;
+
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+
+ if (dtbMode == 0) {
+ GPIO_InitStruct.Alternate = GPIO_AF6_RF_DTB0;
+
+ usePA = 1;
+ pinPA = (GPIO_PIN_0 | GPIO_PIN_1| GPIO_PIN_2| GPIO_PIN_3| GPIO_PIN_4 |
+ GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9);
+
+ usePC = 1;
+ pinPC = (GPIO_PIN_14 | GPIO_PIN_15);
+ }
+
+ if (dtbMode == 7) {
+ GPIO_InitStruct.Alternate = GPIO_AF6_RF_DTB7;
+
+ usePA = 1;
+#ifdef STM32WB35xx
+ pinPA = (GPIO_PIN_8 | GPIO_PIN_9| GPIO_PIN_10| GPIO_PIN_11| GPIO_PIN_13| GPIO_PIN_14);
+#else
+ pinPA = (GPIO_PIN_8 | GPIO_PIN_9| GPIO_PIN_10| GPIO_PIN_11);
+#endif
+
+ usePB = 1;
+#ifdef STM32WB35xx
+ //pinPB = (GPIO_PIN_2 | GPIO_PIN_7 | GPIO_PIN_8| GPIO_PIN_10| GPIO_PIN_11);
+ // PB 7 is in conflict with USART
+ pinPB = (GPIO_PIN_2 | GPIO_PIN_8);
+#else
+ //pinPB = (GPIO_PIN_2 | GPIO_PIN_7 | GPIO_PIN_8| GPIO_PIN_10| GPIO_PIN_11);
+ // PB 7 is in conflict with USART
+ pinPB = (GPIO_PIN_2 | GPIO_PIN_8| GPIO_PIN_10| GPIO_PIN_11);
+#endif
+ }
+
+ if (usePA == 1) {
+#ifdef CORE_CM4
+ // Enable GPIO PA clock for M4 use
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+#else
+ // Enable GPIO PA clock for M0 use
+ __HAL_RCC_C2GPIOA_CLK_ENABLE();
+#endif
+
+ GPIO_InitStruct.Pin = pinPA;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+ }
+
+ if (usePB == 1) {
+#ifdef CORE_CM4
+ // Enable GPIO PB clock for M4 use
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+#else
+ // Enable GPIO PB clock for M0 use
+ __HAL_RCC_C2GPIOB_CLK_ENABLE();
+#endif
+
+ GPIO_InitStruct.Pin = pinPB;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+ }
+
+ if (usePC == 1) {
+#ifdef CORE_CM4
+ // Enable GPIO PC clock for M4 use
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+#else
+ // Enable GPIO PC clock for M0 use
+ __HAL_RCC_C2GPIOC_CLK_ENABLE();
+#endif
+
+ GPIO_InitStruct.Pin = pinPC;
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+ }
+}
+
+void gpio_lld_dtb_deInit(void) {
+ GPIO_InitTypeDef GPIO_InitStruct;
+
+#ifdef CORE_CM4
+ // Enable GPIO PB clock for M4 use
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+#else
+ // Enable GPIO PB clock for M0 use
+ __HAL_RCC_C2GPIOB_CLK_ENABLE();
+#endif
+
+ // configure the GPIO to be set to '1' during frame TX
+ GPIO_InitStruct.Pin = (GPIO_PIN_8);
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH ;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
+}
+#endif /* ! USE_SIMU and ! USE_FPGA */
+
+// Do not initialize LED GPIOs as they are already initialized by BSP if possible (depending on board and possible GPIOs conflicts).
+// So just offer the toggle possibility for debug purposes
+/* Toggle LED1 */
+void gpio_lld_led1_toggle(void) {
+ HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);
+}
+
+/* Toggle LED2 */
+void gpio_lld_led2_toggle(void) {
+ HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
+}
+
+/* Toggle LED3 */
+void gpio_lld_led3_toggle(void) {
+ HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
+}
+
+/* Initialize GPIOs fused by PHY valid CLI */
+void gpio_lld_phy_dbg_init(void) {
+ GPIO_InitTypeDef GPIO_InitStruct;
+
+#ifdef CORE_CM4
+ // Enable GPIO clocks for M4 use
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+#else
+ // Enable GPIO clocks for M0 use
+ __HAL_RCC_C2GPIOA_CLK_ENABLE();
+ __HAL_RCC_C2GPIOB_CLK_ENABLE();
+ __HAL_RCC_C2GPIOC_CLK_ENABLE();
+#endif
+
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_5 | GPIO_PIN_7;
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+#ifndef STM32WB35xx
+ GPIO_InitStruct.Pin = GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+ GPIO_InitStruct.Pin = GPIO_PIN_5;
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+#endif
+}
+
+/* Set GPIO PA0 to '1' */
+void gpio_lld_phy_pa0_up(void) {
+ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
+}
+
+/* Set GPIO PA0 to '0' */
+void gpio_lld_phy_pa0_down(void) {
+ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
+}
+
+/* Set GPIO PA1 to '1' */
+void gpio_lld_phy_pa1_up(void) {
+ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
+}
+
+/* Set GPIO PA1 to '0' */
+void gpio_lld_phy_pa1_down(void) {
+ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
+}
+
+/* Set GPIO PA5 to '1' */
+void gpio_lld_phy_pa5_up(void) {
+ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
+}
+
+/* Set GPIO PA5 to '0' */
+void gpio_lld_phy_pa5_down(void) {
+ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
+}
+
+/* Set GPIO PA7 to '1' */
+void gpio_lld_phy_pa7_up(void) {
+ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET);
+}
+
+/* Set GPIO PA7 to '0' */
+void gpio_lld_phy_pa7_down(void) {
+ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);
+}
+
+#ifndef STM32WB35xx
+/* Set GPIO PB12 to '1' */
+void gpio_lld_phy_pb12_up(void) {
+ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
+}
+
+/* Set GPIO PB12 to '0' */
+void gpio_lld_phy_pb12_down(void) {
+ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
+}
+
+/* Set GPIO PB13 to '1' */
+void gpio_lld_phy_pb13_up(void) {
+ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
+}
+
+/* Set GPIO PB13 to '0' */
+void gpio_lld_phy_pb13_down(void) {
+ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
+}
+
+/* Set GPIO PB14 to '1' */
+void gpio_lld_phy_pb14_up(void) {
+ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);
+}
+
+/* Set GPIO PB14 to '0' */
+void gpio_lld_phy_pb14_down(void) {
+ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);
+}
+
+/* Set GPIO PB15 to '1' */
+void gpio_lld_phy_pb15_up(void) {
+ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_SET);
+}
+
+/* Set GPIO PB15 to '0' */
+void gpio_lld_phy_pb15_down(void) {
+ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET);
+}
+
+/* Set GPIO PC5 to '1' */
+void gpio_lld_phy_pc5_up(void) {
+ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_5, GPIO_PIN_SET);
+}
+
+/* Set GPIO PC5 to '0' */
+void gpio_lld_phy_pc5_down(void) {
+ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_5, GPIO_PIN_RESET);
+}
+#endif
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/