1 /** 2 ****************************************************************************** 3 * @file stm32u5xx_hal_spi_ex.h 4 * @author MCD Application Team 5 * @brief Header file of SPI HAL Extended module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2021 STMicroelectronics. 10 * All rights reserved. 11 * 12 * This software is licensed under terms that can be found in the LICENSE file 13 * in the root directory of this software component. 14 * If no LICENSE file comes with this software, it is provided AS-IS. 15 * 16 ****************************************************************************** 17 */ 18 19 /* Define to prevent recursive inclusion -------------------------------------*/ 20 #ifndef STM32U5xx_HAL_SPI_EX_H 21 #define STM32U5xx_HAL_SPI_EX_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* Includes ------------------------------------------------------------------*/ 28 #include "stm32u5xx_hal_def.h" 29 30 /** @addtogroup STM32U5xx_HAL_Driver 31 * @{ 32 */ 33 34 /** @addtogroup SPIEx 35 * @{ 36 */ 37 38 /* Exported types ------------------------------------------------------------*/ 39 /** @defgroup SPIEx_Exported_Types SPIEx Exported Types 40 * @{ 41 */ 42 43 /** 44 * @brief SPI Autonomous Mode Configuration structure definition 45 */ 46 typedef struct 47 { 48 uint32_t TriggerState; /*!< Specifies the trigger state. This parameter can be a value 49 of @ref FunctionalState */ 50 51 uint32_t TriggerSelection; /*!< Specifies the autonomous mode trigger signal selection. This parameter 52 can be a value of @ref SPI_AutonomousMode_TriggerSelection */ 53 54 uint32_t TriggerPolarity; /*!< Specifies the autonomous mode trigger signal polarity sensitivity. This parameter 55 can be a value of @ref SPI_AutonomousMode_TriggerPolarity */ 56 57 } SPI_AutonomousModeConfTypeDef; 58 59 60 /** 61 * @} 62 */ 63 64 /* Exported constants --------------------------------------------------------*/ 65 /** @defgroup SPIEx_Exported_Constants SPIEx Exported Constants 66 * @{ 67 */ 68 69 /** @defgroup FunctionalState SPI Autonomous Mode State 70 * @{ 71 */ 72 #define SPI_AUTO_MODE_DISABLE (0x00000000UL) 73 #define SPI_AUTO_MODE_ENABLE SPI_AUTOCR_TRIGEN 74 /** 75 * @} 76 */ 77 78 /** @defgroup SPI_AutonomousMode_TriggerSelection Autonomous Mode Trigger Selection 79 * @{ 80 */ 81 #define SPI_TRIG_GRP1 (0x10000000U) /* Trigger Group for SPI1 and SPI2 */ 82 #if defined(SPI3) 83 #define SPI_TRIG_GRP2 (0x20000000U) /* Trigger Group for SPI3 */ 84 #endif /* GRP2_AVAILABILITY */ 85 86 /* HW Trigger signal is GPDMA_CH0_TRG */ 87 #define SPI_GRP1_GPDMA_CH0_TCF_TRG (uint32_t)(SPI_TRIG_GRP1 | (0x00000000U)) 88 /* HW Trigger signal is GPDMA_CH1_TRG */ 89 #define SPI_GRP1_GPDMA_CH1_TCF_TRG (uint32_t)(SPI_TRIG_GRP1 | (0x1U << SPI_AUTOCR_TRIGSEL_Pos)) 90 /* HW Trigger signal is GPDMA_CH2_TRG */ 91 #define SPI_GRP1_GPDMA_CH2_TCF_TRG (uint32_t)(SPI_TRIG_GRP1 | (0x2U << SPI_AUTOCR_TRIGSEL_Pos)) 92 /* HW Trigger signal is GPDMA_CH3_TRG */ 93 #define SPI_GRP1_GPDMA_CH3_TCF_TRG (uint32_t)(SPI_TRIG_GRP1 | (0x3U << SPI_AUTOCR_TRIGSEL_Pos)) 94 /* HW Trigger signal is EXTI4_TRG */ 95 #define SPI_GRP1_EXTI4_TRG (uint32_t)(SPI_TRIG_GRP1 | (0x4U << SPI_AUTOCR_TRIGSEL_Pos)) 96 /* HW Trigger signal is EXTI9_TRG */ 97 #define SPI_GRP1_EXTI9_TRG (uint32_t)(SPI_TRIG_GRP1 | (0x5U << SPI_AUTOCR_TRIGSEL_Pos)) 98 /* HW Trigger signal is LPTIM1_CH1_TRG */ 99 #define SPI_GRP1_LPTIM1_CH1_TRG (uint32_t)(SPI_TRIG_GRP1 | (0x6U << SPI_AUTOCR_TRIGSEL_Pos)) 100 /* HW Trigger signal is LPTIM2_CH1_TRG */ 101 #define SPI_GRP1_LPTIM2_CH1_TRG (uint32_t)(SPI_TRIG_GRP1 | (0x7U << SPI_AUTOCR_TRIGSEL_Pos)) 102 /* HW Trigger signal is COMP1_TRG */ 103 #define SPI_GRP1_COMP1_TRG (uint32_t)(SPI_TRIG_GRP1 | (0x8U << SPI_AUTOCR_TRIGSEL_Pos)) 104 /* HW Trigger signal is COMP2_TRG */ 105 #define SPI_GRP1_COMP2_TRG (uint32_t)(SPI_TRIG_GRP1 | (0x9U << SPI_AUTOCR_TRIGSEL_Pos)) 106 /* HW Trigger signal is RTC_ALRA_TRG */ 107 #define SPI_GRP1_RTC_ALRA_TRG (uint32_t)(SPI_TRIG_GRP1 | (0xAU << SPI_AUTOCR_TRIGSEL_Pos)) 108 /* HW Trigger signal is RTC_WUT_TRG */ 109 #define SPI_GRP1_RTC_WUT_TRG (uint32_t)(SPI_TRIG_GRP1 | (0xBU << SPI_AUTOCR_TRIGSEL_Pos)) 110 111 #if defined(SPI3) 112 /* HW Trigger signal is LPDMA_CH0_TRG */ 113 #define SPI_GRP2_LPDMA_CH0_TCF_TRG (uint32_t)(SPI_TRIG_GRP2 | (0x00000000U)) 114 /* HW Trigger signal is LPDMA_CH1_TRG */ 115 #define SPI_GRP2_LPDMA_CH1_TCF_TRG (uint32_t)(SPI_TRIG_GRP2 | (0x1U << SPI_AUTOCR_TRIGSEL_Pos)) 116 /* HW Trigger signal is LPDMA_CH2_TRG */ 117 #define SPI_GRP2_LPDMA_CH2_TCF_TRG (uint32_t)(SPI_TRIG_GRP2 | (0x2U << SPI_AUTOCR_TRIGSEL_Pos)) 118 /* HW Trigger signal is LPDMA_CH3_TRG */ 119 #define SPI_GRP2_LPDMA_CH3_TCF_TRG (uint32_t)(SPI_TRIG_GRP2 | (0x3U << SPI_AUTOCR_TRIGSEL_Pos)) 120 /* HW Trigger signal is EXTI4_TRG */ 121 #define SPI_GRP2_EXTI4_TRG (uint32_t)(SPI_TRIG_GRP2 | (0x4U << SPI_AUTOCR_TRIGSEL_Pos)) 122 /* HW Trigger signal is EXTI8_TRG */ 123 #define SPI_GRP2_EXTI8_TRG (uint32_t)(SPI_TRIG_GRP2 | (0x5U << SPI_AUTOCR_TRIGSEL_Pos)) 124 /* HW Trigger signal is LPTIM1_CH1_TRG */ 125 #define SPI_GRP2_LPTIM1_CH1_TRG (uint32_t)(SPI_TRIG_GRP2 | (0x6U << SPI_AUTOCR_TRIGSEL_Pos)) 126 /* HW Trigger signal is LPTIM3_CH1_TRG */ 127 #define SPI_GRP2_LPTIM3_CH1_TRG (uint32_t)(SPI_TRIG_GRP2 | (0x7U << SPI_AUTOCR_TRIGSEL_Pos)) 128 /* HW Trigger signal is COMP1_TRG */ 129 #define SPI_GRP2_COMP1_TRG (uint32_t)(SPI_TRIG_GRP2 | (0x8U << SPI_AUTOCR_TRIGSEL_Pos)) 130 /* HW Trigger signal is COMP2_TRG */ 131 #define SPI_GRP2_COMP2_TRG (uint32_t)(SPI_TRIG_GRP2 | (0x9U << SPI_AUTOCR_TRIGSEL_Pos)) 132 /* HW Trigger signal is RTC_ALRA_TRG */ 133 #define SPI_GRP2_RTC_ALRA_TRG (uint32_t)(SPI_TRIG_GRP2 | (0xAU << SPI_AUTOCR_TRIGSEL_Pos)) 134 /* HW Trigger signal is RTC_WUT_TRG */ 135 #define SPI_GRP2_RTC_WUT_TRG (uint32_t)(SPI_TRIG_GRP2 | (0xBU << SPI_AUTOCR_TRIGSEL_Pos)) 136 #endif /* GRP2_AVAILABILITY */ 137 /** 138 * @} 139 */ 140 141 /** @defgroup SPI_AutonomousMode_TriggerPolarity Autonomous Mode Trigger Polarity 142 * @{ 143 */ 144 #define SPI_TRIG_POLARITY_RISING (0x00000000UL) /* SPI HW Trigger signal on rising edge */ 145 #define SPI_TRIG_POLARITY_FALLING SPI_AUTOCR_TRIGPOL /* SPI HW Trigger signal on falling edge */ 146 /** 147 * @} 148 */ 149 150 /** 151 * @} 152 */ 153 154 /* Exported macros -----------------------------------------------------------*/ 155 /** @defgroup SPIEx_Exported_Macros SPIEx Extended Exported Macros 156 * @{ 157 */ 158 159 #define IS_SPI_AUTO_MODE(__MODE__) (((__MODE__) == SPI_AUTO_MODE_DISABLE) || \ 160 ((__MODE__) == SPI_AUTO_MODE_ENABLE)) 161 162 #if defined(SPI_TRIG_GRP2) 163 #define IS_SPI_AUTONOMOUS_INSTANCE(__INSTANCE__) (IS_SPI_GRP1_INSTANCE(__INSTANCE__) || \ 164 IS_SPI_GRP2_INSTANCE(__INSTANCE__)) 165 #else 166 #define IS_SPI_AUTONOMOUS_INSTANCE(__INSTANCE__) IS_SPI_GRP1_INSTANCE(__INSTANCE__) 167 #endif /* SPI_TRIG_GRP2 */ 168 169 #if defined(SPI_TRIG_GRP2) 170 #define IS_SPI_TRIG_SOURCE(__INSTANCE__, __SOURCE__) ((IS_SPI_GRP2_INSTANCE(__INSTANCE__)) ? \ 171 IS_SPI_GRP2_TRIG_SOURCE(__SOURCE__) : \ 172 IS_SPI_GRP1_TRIG_SOURCE(__SOURCE__)) 173 #endif /* SPI_TRIG_GRP2 */ 174 175 #define IS_SPI_GRP1_TRIG_SOURCE(__SOURCE__) (((__SOURCE__) == SPI_GRP1_GPDMA_CH0_TCF_TRG ) || \ 176 ((__SOURCE__) == SPI_GRP1_GPDMA_CH1_TCF_TRG ) || \ 177 ((__SOURCE__) == SPI_GRP1_GPDMA_CH2_TCF_TRG ) || \ 178 ((__SOURCE__) == SPI_GRP1_GPDMA_CH3_TCF_TRG ) || \ 179 ((__SOURCE__) == SPI_GRP1_EXTI4_TRG ) || \ 180 ((__SOURCE__) == SPI_GRP1_EXTI9_TRG ) || \ 181 ((__SOURCE__) == SPI_GRP1_LPTIM1_CH1_TRG ) || \ 182 ((__SOURCE__) == SPI_GRP1_LPTIM2_CH1_TRG ) || \ 183 ((__SOURCE__) == SPI_GRP1_COMP1_TRG ) || \ 184 ((__SOURCE__) == SPI_GRP1_COMP2_TRG ) || \ 185 ((__SOURCE__) == SPI_GRP1_RTC_ALRA_TRG ) || \ 186 ((__SOURCE__) == SPI_GRP1_RTC_WUT_TRG )) 187 188 #define IS_SPI_GRP2_TRIG_SOURCE(__SOURCE__) (((__SOURCE__) == SPI_GRP2_LPDMA_CH0_TCF_TRG ) || \ 189 ((__SOURCE__) == SPI_GRP2_LPDMA_CH1_TCF_TRG ) || \ 190 ((__SOURCE__) == SPI_GRP2_LPDMA_CH2_TCF_TRG ) || \ 191 ((__SOURCE__) == SPI_GRP2_LPDMA_CH3_TCF_TRG ) || \ 192 ((__SOURCE__) == SPI_GRP2_EXTI4_TRG ) || \ 193 ((__SOURCE__) == SPI_GRP2_EXTI8_TRG ) || \ 194 ((__SOURCE__) == SPI_GRP2_LPTIM1_CH1_TRG ) || \ 195 ((__SOURCE__) == SPI_GRP2_LPTIM3_CH1_TRG ) || \ 196 ((__SOURCE__) == SPI_GRP2_COMP1_TRG ) || \ 197 ((__SOURCE__) == SPI_GRP2_COMP2_TRG ) || \ 198 ((__SOURCE__) == SPI_GRP2_RTC_ALRA_TRG ) || \ 199 ((__SOURCE__) == SPI_GRP2_RTC_WUT_TRG )) 200 201 #define IS_SPI_AUTO_MODE_TRG_POL(__POLARITY__) (((__POLARITY__) == SPI_TRIG_POLARITY_RISING) || \ 202 ((__POLARITY__) == SPI_TRIG_POLARITY_FALLING)) 203 204 /** 205 * @} 206 */ 207 208 /* Exported functions --------------------------------------------------------*/ 209 /** @addtogroup SPIEx_Exported_Functions 210 * @{ 211 */ 212 213 /* Initialization and de-initialization functions ****************************/ 214 /* IO operation functions *****************************************************/ 215 /** @addtogroup SPIEx_Exported_Functions_Group1 216 * @{ 217 */ 218 HAL_StatusTypeDef HAL_SPIEx_FlushRxFifo(const SPI_HandleTypeDef *hspi); 219 HAL_StatusTypeDef HAL_SPIEx_EnableLockConfiguration(SPI_HandleTypeDef *hspi); 220 HAL_StatusTypeDef HAL_SPIEx_ConfigureUnderrun(SPI_HandleTypeDef *hspi, uint32_t UnderrunDetection, 221 uint32_t UnderrunBehaviour); 222 /** 223 * @} 224 */ 225 226 /** @addtogroup SPI_Autonomous_Mode_Functions Autonomous Mode Functions 227 * @{ 228 */ 229 HAL_StatusTypeDef HAL_SPIEx_SetConfigAutonomousMode(SPI_HandleTypeDef *hspi, 230 const SPI_AutonomousModeConfTypeDef *sConfig); 231 HAL_StatusTypeDef HAL_SPIEx_GetConfigAutonomousMode(const SPI_HandleTypeDef *hspi, 232 SPI_AutonomousModeConfTypeDef *sConfig); 233 HAL_StatusTypeDef HAL_SPIEx_ClearConfigAutonomousMode(SPI_HandleTypeDef *hspi); 234 /** 235 * @} 236 */ 237 /** 238 * @} 239 */ 240 241 /** 242 * @} 243 */ 244 245 /** 246 * @} 247 */ 248 249 250 #ifdef __cplusplus 251 } 252 #endif 253 254 #endif /* STM32U5xx_HAL_SPI_EX_H */ 255