1 /** 2 ****************************************************************************** 3 * @file stm32h5xx_hal_spi.h 4 * @author MCD Application Team 5 * @brief Header file of SPI HAL module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2023 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 STM32H5xx_HAL_SPI_H 21 #define STM32H5xx_HAL_SPI_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* Includes ------------------------------------------------------------------*/ 28 #include "stm32h5xx_hal_def.h" 29 30 /** @addtogroup STM32H5xx_HAL_Driver 31 * @{ 32 */ 33 34 /** @addtogroup SPI 35 * @{ 36 */ 37 38 /* Exported types ------------------------------------------------------------*/ 39 /** @defgroup SPI_Exported_Types SPI Exported Types 40 * @{ 41 */ 42 43 /** 44 * @brief SPI Configuration Structure definition 45 */ 46 typedef struct 47 { 48 uint32_t Mode; /*!< Specifies the SPI operating mode. 49 This parameter can be a value of @ref SPI_Mode */ 50 51 uint32_t Direction; /*!< Specifies the SPI bidirectional mode state. 52 This parameter can be a value of @ref SPI_Direction */ 53 54 uint32_t DataSize; /*!< Specifies the SPI data size. 55 This parameter can be a value of @ref SPI_Data_Size */ 56 57 uint32_t CLKPolarity; /*!< Specifies the serial clock steady state. 58 This parameter can be a value of @ref SPI_Clock_Polarity */ 59 60 uint32_t CLKPhase; /*!< Specifies the clock active edge for the bit capture. 61 This parameter can be a value of @ref SPI_Clock_Phase */ 62 63 uint32_t NSS; /*!< Specifies whether the NSS signal is managed by 64 hardware (NSS pin) or by software using the SSI bit. 65 This parameter can be a value of 66 @ref SPI_Slave_Select_Management */ 67 68 uint32_t BaudRatePrescaler; /*!< Specifies the Baud Rate prescaler value which will be 69 used to configure the transmit and receive SCK clock. 70 This parameter can be a value of @ref SPI_BaudRate_Prescaler 71 @note The communication clock is derived from the master 72 clock. The slave clock does not need to be set. */ 73 74 uint32_t FirstBit; /*!< Specifies whether data transfers start from MSB or LSB bit. 75 This parameter can be a value of @ref SPI_MSB_LSB_Transmission */ 76 77 uint32_t TIMode; /*!< Specifies if the TI mode is enabled or not. 78 This parameter can be a value of @ref SPI_TI_Mode */ 79 80 uint32_t CRCCalculation; /*!< Specifies if the CRC calculation is enabled or not. 81 This parameter can be a value of @ref SPI_CRC_Calculation */ 82 83 uint32_t CRCPolynomial; /*!< Specifies the polynomial used for the CRC calculation. 84 This parameter must be an odd number between 85 Min_Data = 0 and Max_Data = 65535 */ 86 87 uint32_t CRCLength; /*!< Specifies the CRC Length used for the CRC calculation. 88 This parameter can be a value of @ref SPI_CRC_length */ 89 90 uint32_t NSSPMode; /*!< Specifies whether the NSSP signal is enabled or not . 91 This parameter can be a value of @ref SPI_NSSP_Mode 92 This mode is activated by the SSOM bit in the SPIx_CR2 register 93 and it takes effect only if the SPI interface is configured 94 as Motorola SPI master (FRF=0). */ 95 96 uint32_t NSSPolarity; /*!< Specifies which level of SS input/output external signal 97 (present on SS pin) is considered as active one. 98 This parameter can be a value of @ref SPI_NSS_Polarity */ 99 100 uint32_t FifoThreshold; /*!< Specifies the FIFO threshold level. 101 This parameter can be a value of @ref SPI_Fifo_Threshold */ 102 103 uint32_t TxCRCInitializationPattern; /*!< Specifies the transmitter CRC initialization Pattern used for 104 the CRC calculation. This parameter can be a value of 105 @ref SPI_CRC_Calculation_Initialization_Pattern */ 106 107 uint32_t RxCRCInitializationPattern; /*!< Specifies the receiver CRC initialization Pattern used for 108 the CRC calculation. This parameter can be a value of 109 @ref SPI_CRC_Calculation_Initialization_Pattern */ 110 111 uint32_t MasterSSIdleness; /*!< Specifies an extra delay, expressed in number of SPI clock cycle 112 periods, inserted additionally between active edge of SS 113 and first data transaction start in master mode. 114 This parameter can be a value of @ref SPI_Master_SS_Idleness */ 115 116 uint32_t MasterInterDataIdleness; /*!< Specifies minimum time delay (expressed in SPI clock cycles periods) 117 inserted between two consecutive data frames in master mode. 118 This parameter can be a value of 119 @ref SPI_Master_InterData_Idleness */ 120 121 uint32_t MasterReceiverAutoSusp; /*!< Control continuous SPI transfer in master receiver mode 122 and automatic management in order to avoid overrun condition. 123 This parameter can be a value of @ref SPI_Master_RX_AutoSuspend*/ 124 125 uint32_t MasterKeepIOState; /*!< Control of Alternate function GPIOs state 126 This parameter can be a value of @ref SPI_Master_Keep_IO_State */ 127 128 uint32_t IOSwap; /*!< Invert MISO/MOSI alternate functions 129 This parameter can be a value of @ref SPI_IO_Swap */ 130 131 uint32_t ReadyMasterManagement; /*!< Specifies if RDY Signal is managed internally or not. 132 This parameter can be a value of @ref SPI_RDY_Master_Management */ 133 134 uint32_t ReadyPolarity; /*!< Specifies which level of RDY Signal input (present on RDY pin) 135 is considered as active one. 136 This parameter can be a value of @ref SPI_RDY_Polarity */ 137 } SPI_InitTypeDef; 138 139 /** 140 * @brief HAL SPI State structure definition 141 */ 142 typedef enum 143 { 144 HAL_SPI_STATE_RESET = 0x00UL, /*!< Peripheral not Initialized */ 145 HAL_SPI_STATE_READY = 0x01UL, /*!< Peripheral Initialized and ready for use */ 146 HAL_SPI_STATE_BUSY = 0x02UL, /*!< an internal process is ongoing */ 147 HAL_SPI_STATE_BUSY_TX = 0x03UL, /*!< Data Transmission process is ongoing */ 148 HAL_SPI_STATE_BUSY_RX = 0x04UL, /*!< Data Reception process is ongoing */ 149 HAL_SPI_STATE_BUSY_TX_RX = 0x05UL, /*!< Data Transmission and Reception process is ongoing */ 150 HAL_SPI_STATE_ERROR = 0x06UL, /*!< SPI error state */ 151 HAL_SPI_STATE_ABORT = 0x07UL /*!< SPI abort is ongoing */ 152 } HAL_SPI_StateTypeDef; 153 154 155 /** 156 * @brief SPI handle Structure definition 157 */ 158 typedef struct __SPI_HandleTypeDef 159 { 160 SPI_TypeDef *Instance; /*!< SPI registers base address */ 161 162 SPI_InitTypeDef Init; /*!< SPI communication parameters */ 163 164 const uint8_t *pTxBuffPtr; /*!< Pointer to SPI Tx transfer Buffer */ 165 166 uint16_t TxXferSize; /*!< SPI Tx Transfer size */ 167 168 __IO uint16_t TxXferCount; /*!< SPI Tx Transfer Counter */ 169 170 uint8_t *pRxBuffPtr; /*!< Pointer to SPI Rx transfer Buffer */ 171 172 uint16_t RxXferSize; /*!< SPI Rx Transfer size */ 173 174 __IO uint16_t RxXferCount; /*!< SPI Rx Transfer Counter */ 175 176 uint32_t CRCSize; /*!< SPI CRC size used for the transfer */ 177 178 void (*RxISR)(struct __SPI_HandleTypeDef *hspi); /*!< function pointer on Rx ISR */ 179 180 void (*TxISR)(struct __SPI_HandleTypeDef *hspi); /*!< function pointer on Tx ISR */ 181 182 #if defined(HAL_DMA_MODULE_ENABLED) 183 DMA_HandleTypeDef *hdmatx; /*!< SPI Tx DMA Handle parameters */ 184 185 DMA_HandleTypeDef *hdmarx; /*!< SPI Rx DMA Handle parameters */ 186 #endif /* HAL_DMA_MODULE_ENABLED */ 187 188 HAL_LockTypeDef Lock; /*!< Locking object */ 189 190 __IO HAL_SPI_StateTypeDef State; /*!< SPI communication state */ 191 192 __IO uint32_t ErrorCode; /*!< SPI Error code */ 193 194 195 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1UL) 196 void (* TxCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Tx Completed callback */ 197 void (* RxCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Rx Completed callback */ 198 void (* TxRxCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI TxRx Completed callback */ 199 void (* TxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Tx Half Completed callback */ 200 void (* RxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Rx Half Completed callback */ 201 void (* TxRxHalfCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI TxRx Half Completed callback */ 202 void (* ErrorCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Error callback */ 203 void (* AbortCpltCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Abort callback */ 204 void (* SuspendCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Suspend callback */ 205 void (* MspInitCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Msp Init callback */ 206 void (* MspDeInitCallback)(struct __SPI_HandleTypeDef *hspi); /*!< SPI Msp DeInit callback */ 207 208 #endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ 209 } SPI_HandleTypeDef; 210 211 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1UL) 212 /** 213 * @brief HAL SPI Callback ID enumeration definition 214 */ 215 typedef enum 216 { 217 HAL_SPI_TX_COMPLETE_CB_ID = 0x00UL, /*!< SPI Tx Completed callback ID */ 218 HAL_SPI_RX_COMPLETE_CB_ID = 0x01UL, /*!< SPI Rx Completed callback ID */ 219 HAL_SPI_TX_RX_COMPLETE_CB_ID = 0x02UL, /*!< SPI TxRx Completed callback ID */ 220 HAL_SPI_TX_HALF_COMPLETE_CB_ID = 0x03UL, /*!< SPI Tx Half Completed callback ID */ 221 HAL_SPI_RX_HALF_COMPLETE_CB_ID = 0x04UL, /*!< SPI Rx Half Completed callback ID */ 222 HAL_SPI_TX_RX_HALF_COMPLETE_CB_ID = 0x05UL, /*!< SPI TxRx Half Completed callback ID */ 223 HAL_SPI_ERROR_CB_ID = 0x06UL, /*!< SPI Error callback ID */ 224 HAL_SPI_ABORT_CB_ID = 0x07UL, /*!< SPI Abort callback ID */ 225 HAL_SPI_SUSPEND_CB_ID = 0x08UL, /*!< SPI Suspend callback ID */ 226 HAL_SPI_MSPINIT_CB_ID = 0x09UL, /*!< SPI Msp Init callback ID */ 227 HAL_SPI_MSPDEINIT_CB_ID = 0x0AUL /*!< SPI Msp DeInit callback ID */ 228 229 } HAL_SPI_CallbackIDTypeDef; 230 231 /** 232 * @brief HAL SPI Callback pointer definition 233 */ 234 typedef void (*pSPI_CallbackTypeDef)(SPI_HandleTypeDef *hspi); /*!< pointer to an SPI callback function */ 235 236 #endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ 237 /** 238 * @} 239 */ 240 241 /* Exported constants --------------------------------------------------------*/ 242 243 /** @defgroup SPI_Exported_Constants SPI Exported Constants 244 * @{ 245 */ 246 247 /** @defgroup SPI_FIFO_Type SPI FIFO Type 248 * @{ 249 */ 250 #define SPI_LOWEND_FIFO_SIZE 8UL 251 #define SPI_HIGHEND_FIFO_SIZE 16UL 252 /** 253 * @} 254 */ 255 256 /** @defgroup SPI_Error_Code SPI Error Codes 257 * @{ 258 */ 259 #define HAL_SPI_ERROR_NONE (0x00000000UL) /*!< No error */ 260 #define HAL_SPI_ERROR_MODF (0x00000001UL) /*!< MODF error */ 261 #define HAL_SPI_ERROR_CRC (0x00000002UL) /*!< CRC error */ 262 #define HAL_SPI_ERROR_OVR (0x00000004UL) /*!< OVR error */ 263 #define HAL_SPI_ERROR_FRE (0x00000008UL) /*!< FRE error */ 264 #if defined(HAL_DMA_MODULE_ENABLED) 265 #define HAL_SPI_ERROR_DMA (0x00000010UL) /*!< DMA transfer error */ 266 #endif /* HAL_DMA_MODULE_ENABLED */ 267 #define HAL_SPI_ERROR_FLAG (0x00000020UL) /*!< Error on RXP/TXP/DXP/FTLVL/FRLVL Flag */ 268 #define HAL_SPI_ERROR_ABORT (0x00000040UL) /*!< Error during SPI Abort procedure */ 269 #define HAL_SPI_ERROR_UDR (0x00000080UL) /*!< Underrun error */ 270 #define HAL_SPI_ERROR_TIMEOUT (0x00000100UL) /*!< Timeout error */ 271 #define HAL_SPI_ERROR_UNKNOW (0x00000200UL) /*!< Unknown error */ 272 #define HAL_SPI_ERROR_NOT_SUPPORTED (0x00000400UL) /*!< Requested operation not supported */ 273 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1UL) 274 #define HAL_SPI_ERROR_INVALID_CALLBACK (0x00001000UL) /*!< Invalid Callback error */ 275 #endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ 276 /** 277 * @} 278 */ 279 280 /** @defgroup SPI_Mode SPI Mode 281 * @{ 282 */ 283 #define SPI_MODE_SLAVE (0x00000000UL) 284 #define SPI_MODE_MASTER SPI_CFG2_MASTER 285 /** 286 * @} 287 */ 288 289 /** @defgroup SPI_Direction SPI Direction Mode 290 * @{ 291 */ 292 #define SPI_DIRECTION_2LINES (0x00000000UL) 293 #define SPI_DIRECTION_2LINES_TXONLY SPI_CFG2_COMM_0 294 #define SPI_DIRECTION_2LINES_RXONLY SPI_CFG2_COMM_1 295 #define SPI_DIRECTION_1LINE SPI_CFG2_COMM 296 /** 297 * @} 298 */ 299 300 /** @defgroup SPI_Data_Size SPI Data Size 301 * @{ 302 */ 303 #define SPI_DATASIZE_4BIT (0x00000003UL) 304 #define SPI_DATASIZE_5BIT (0x00000004UL) 305 #define SPI_DATASIZE_6BIT (0x00000005UL) 306 #define SPI_DATASIZE_7BIT (0x00000006UL) 307 #define SPI_DATASIZE_8BIT (0x00000007UL) 308 #define SPI_DATASIZE_9BIT (0x00000008UL) 309 #define SPI_DATASIZE_10BIT (0x00000009UL) 310 #define SPI_DATASIZE_11BIT (0x0000000AUL) 311 #define SPI_DATASIZE_12BIT (0x0000000BUL) 312 #define SPI_DATASIZE_13BIT (0x0000000CUL) 313 #define SPI_DATASIZE_14BIT (0x0000000DUL) 314 #define SPI_DATASIZE_15BIT (0x0000000EUL) 315 #define SPI_DATASIZE_16BIT (0x0000000FUL) 316 #define SPI_DATASIZE_17BIT (0x00000010UL) 317 #define SPI_DATASIZE_18BIT (0x00000011UL) 318 #define SPI_DATASIZE_19BIT (0x00000012UL) 319 #define SPI_DATASIZE_20BIT (0x00000013UL) 320 #define SPI_DATASIZE_21BIT (0x00000014UL) 321 #define SPI_DATASIZE_22BIT (0x00000015UL) 322 #define SPI_DATASIZE_23BIT (0x00000016UL) 323 #define SPI_DATASIZE_24BIT (0x00000017UL) 324 #define SPI_DATASIZE_25BIT (0x00000018UL) 325 #define SPI_DATASIZE_26BIT (0x00000019UL) 326 #define SPI_DATASIZE_27BIT (0x0000001AUL) 327 #define SPI_DATASIZE_28BIT (0x0000001BUL) 328 #define SPI_DATASIZE_29BIT (0x0000001CUL) 329 #define SPI_DATASIZE_30BIT (0x0000001DUL) 330 #define SPI_DATASIZE_31BIT (0x0000001EUL) 331 #define SPI_DATASIZE_32BIT (0x0000001FUL) 332 /** 333 * @} 334 */ 335 336 /** @defgroup SPI_Clock_Polarity SPI Clock Polarity 337 * @{ 338 */ 339 #define SPI_POLARITY_LOW (0x00000000UL) 340 #define SPI_POLARITY_HIGH SPI_CFG2_CPOL 341 /** 342 * @} 343 */ 344 345 /** @defgroup SPI_Clock_Phase SPI Clock Phase 346 * @{ 347 */ 348 #define SPI_PHASE_1EDGE (0x00000000UL) 349 #define SPI_PHASE_2EDGE SPI_CFG2_CPHA 350 /** 351 * @} 352 */ 353 354 /** @defgroup SPI_Slave_Select_Management SPI Slave Select Management 355 * @{ 356 */ 357 #define SPI_NSS_SOFT SPI_CFG2_SSM 358 #define SPI_NSS_HARD_INPUT (0x00000000UL) 359 #define SPI_NSS_HARD_OUTPUT SPI_CFG2_SSOE 360 /** 361 * @} 362 */ 363 364 /** @defgroup SPI_NSSP_Mode SPI NSS Pulse Mode 365 * @{ 366 */ 367 #define SPI_NSS_PULSE_DISABLE (0x00000000UL) 368 #define SPI_NSS_PULSE_ENABLE SPI_CFG2_SSOM 369 /** 370 * @} 371 */ 372 373 /** @defgroup SPI_BaudRate_Prescaler SPI BaudRate Prescaler 374 * @{ 375 */ 376 #define SPI_BAUDRATEPRESCALER_BYPASS (0x80000000UL) 377 #define SPI_BAUDRATEPRESCALER_2 (0x00000000UL) 378 #define SPI_BAUDRATEPRESCALER_4 (0x10000000UL) 379 #define SPI_BAUDRATEPRESCALER_8 (0x20000000UL) 380 #define SPI_BAUDRATEPRESCALER_16 (0x30000000UL) 381 #define SPI_BAUDRATEPRESCALER_32 (0x40000000UL) 382 #define SPI_BAUDRATEPRESCALER_64 (0x50000000UL) 383 #define SPI_BAUDRATEPRESCALER_128 (0x60000000UL) 384 #define SPI_BAUDRATEPRESCALER_256 (0x70000000UL) 385 /** 386 * @} 387 */ 388 389 /** @defgroup SPI_MSB_LSB_Transmission SPI MSB LSB Transmission 390 * @{ 391 */ 392 #define SPI_FIRSTBIT_MSB (0x00000000UL) 393 #define SPI_FIRSTBIT_LSB SPI_CFG2_LSBFRST 394 /** 395 * @} 396 */ 397 398 /** @defgroup SPI_TI_Mode SPI TI Mode 399 * @{ 400 */ 401 #define SPI_TIMODE_DISABLE (0x00000000UL) 402 #define SPI_TIMODE_ENABLE SPI_CFG2_SP_0 403 /** 404 * @} 405 */ 406 407 /** @defgroup SPI_CRC_Calculation SPI CRC Calculation 408 * @{ 409 */ 410 #define SPI_CRCCALCULATION_DISABLE (0x00000000UL) 411 #define SPI_CRCCALCULATION_ENABLE SPI_CFG1_CRCEN 412 /** 413 * @} 414 */ 415 416 /** @defgroup SPI_CRC_length SPI CRC Length 417 * @{ 418 */ 419 #define SPI_CRC_LENGTH_DATASIZE (0x00000000UL) 420 #define SPI_CRC_LENGTH_4BIT (0x00030000UL) 421 #define SPI_CRC_LENGTH_5BIT (0x00040000UL) 422 #define SPI_CRC_LENGTH_6BIT (0x00050000UL) 423 #define SPI_CRC_LENGTH_7BIT (0x00060000UL) 424 #define SPI_CRC_LENGTH_8BIT (0x00070000UL) 425 #define SPI_CRC_LENGTH_9BIT (0x00080000UL) 426 #define SPI_CRC_LENGTH_10BIT (0x00090000UL) 427 #define SPI_CRC_LENGTH_11BIT (0x000A0000UL) 428 #define SPI_CRC_LENGTH_12BIT (0x000B0000UL) 429 #define SPI_CRC_LENGTH_13BIT (0x000C0000UL) 430 #define SPI_CRC_LENGTH_14BIT (0x000D0000UL) 431 #define SPI_CRC_LENGTH_15BIT (0x000E0000UL) 432 #define SPI_CRC_LENGTH_16BIT (0x000F0000UL) 433 #define SPI_CRC_LENGTH_17BIT (0x00100000UL) 434 #define SPI_CRC_LENGTH_18BIT (0x00110000UL) 435 #define SPI_CRC_LENGTH_19BIT (0x00120000UL) 436 #define SPI_CRC_LENGTH_20BIT (0x00130000UL) 437 #define SPI_CRC_LENGTH_21BIT (0x00140000UL) 438 #define SPI_CRC_LENGTH_22BIT (0x00150000UL) 439 #define SPI_CRC_LENGTH_23BIT (0x00160000UL) 440 #define SPI_CRC_LENGTH_24BIT (0x00170000UL) 441 #define SPI_CRC_LENGTH_25BIT (0x00180000UL) 442 #define SPI_CRC_LENGTH_26BIT (0x00190000UL) 443 #define SPI_CRC_LENGTH_27BIT (0x001A0000UL) 444 #define SPI_CRC_LENGTH_28BIT (0x001B0000UL) 445 #define SPI_CRC_LENGTH_29BIT (0x001C0000UL) 446 #define SPI_CRC_LENGTH_30BIT (0x001D0000UL) 447 #define SPI_CRC_LENGTH_31BIT (0x001E0000UL) 448 #define SPI_CRC_LENGTH_32BIT (0x001F0000UL) 449 /** 450 * @} 451 */ 452 453 /** @defgroup SPI_Fifo_Threshold SPI Fifo Threshold 454 * @{ 455 */ 456 #define SPI_FIFO_THRESHOLD_01DATA (0x00000000UL) 457 #define SPI_FIFO_THRESHOLD_02DATA (0x00000020UL) 458 #define SPI_FIFO_THRESHOLD_03DATA (0x00000040UL) 459 #define SPI_FIFO_THRESHOLD_04DATA (0x00000060UL) 460 #define SPI_FIFO_THRESHOLD_05DATA (0x00000080UL) 461 #define SPI_FIFO_THRESHOLD_06DATA (0x000000A0UL) 462 #define SPI_FIFO_THRESHOLD_07DATA (0x000000C0UL) 463 #define SPI_FIFO_THRESHOLD_08DATA (0x000000E0UL) 464 #define SPI_FIFO_THRESHOLD_09DATA (0x00000100UL) 465 #define SPI_FIFO_THRESHOLD_10DATA (0x00000120UL) 466 #define SPI_FIFO_THRESHOLD_11DATA (0x00000140UL) 467 #define SPI_FIFO_THRESHOLD_12DATA (0x00000160UL) 468 #define SPI_FIFO_THRESHOLD_13DATA (0x00000180UL) 469 #define SPI_FIFO_THRESHOLD_14DATA (0x000001A0UL) 470 #define SPI_FIFO_THRESHOLD_15DATA (0x000001C0UL) 471 #define SPI_FIFO_THRESHOLD_16DATA (0x000001E0UL) 472 /** 473 * @} 474 */ 475 476 /** @defgroup SPI_CRC_Calculation_Initialization_Pattern SPI CRC Calculation Initialization Pattern 477 * @{ 478 */ 479 #define SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN (0x00000000UL) 480 #define SPI_CRC_INITIALIZATION_ALL_ONE_PATTERN (0x00000001UL) 481 /** 482 * @} 483 */ 484 485 /** @defgroup SPI_NSS_Polarity SPI NSS Polarity 486 * @{ 487 */ 488 #define SPI_NSS_POLARITY_LOW (0x00000000UL) 489 #define SPI_NSS_POLARITY_HIGH SPI_CFG2_SSIOP 490 /** 491 * @} 492 */ 493 494 /** @defgroup SPI_Master_Keep_IO_State Keep IO State 495 * @{ 496 */ 497 #define SPI_MASTER_KEEP_IO_STATE_DISABLE (0x00000000UL) 498 #define SPI_MASTER_KEEP_IO_STATE_ENABLE SPI_CFG2_AFCNTR 499 /** 500 * @} 501 */ 502 503 /** @defgroup SPI_IO_Swap Control SPI IO Swap 504 * @{ 505 */ 506 #define SPI_IO_SWAP_DISABLE (0x00000000UL) 507 #define SPI_IO_SWAP_ENABLE SPI_CFG2_IOSWP 508 /** 509 * @} 510 */ 511 512 /** @defgroup SPI_Master_SS_Idleness SPI Master SS Idleness 513 * @{ 514 */ 515 #define SPI_MASTER_SS_IDLENESS_00CYCLE (0x00000000UL) 516 #define SPI_MASTER_SS_IDLENESS_01CYCLE (0x00000001UL) 517 #define SPI_MASTER_SS_IDLENESS_02CYCLE (0x00000002UL) 518 #define SPI_MASTER_SS_IDLENESS_03CYCLE (0x00000003UL) 519 #define SPI_MASTER_SS_IDLENESS_04CYCLE (0x00000004UL) 520 #define SPI_MASTER_SS_IDLENESS_05CYCLE (0x00000005UL) 521 #define SPI_MASTER_SS_IDLENESS_06CYCLE (0x00000006UL) 522 #define SPI_MASTER_SS_IDLENESS_07CYCLE (0x00000007UL) 523 #define SPI_MASTER_SS_IDLENESS_08CYCLE (0x00000008UL) 524 #define SPI_MASTER_SS_IDLENESS_09CYCLE (0x00000009UL) 525 #define SPI_MASTER_SS_IDLENESS_10CYCLE (0x0000000AUL) 526 #define SPI_MASTER_SS_IDLENESS_11CYCLE (0x0000000BUL) 527 #define SPI_MASTER_SS_IDLENESS_12CYCLE (0x0000000CUL) 528 #define SPI_MASTER_SS_IDLENESS_13CYCLE (0x0000000DUL) 529 #define SPI_MASTER_SS_IDLENESS_14CYCLE (0x0000000EUL) 530 #define SPI_MASTER_SS_IDLENESS_15CYCLE (0x0000000FUL) 531 /** 532 * @} 533 */ 534 535 /** @defgroup SPI_Master_InterData_Idleness SPI Master Inter-Data Idleness 536 * @{ 537 */ 538 #define SPI_MASTER_INTERDATA_IDLENESS_00CYCLE (0x00000000UL) 539 #define SPI_MASTER_INTERDATA_IDLENESS_01CYCLE (0x00000010UL) 540 #define SPI_MASTER_INTERDATA_IDLENESS_02CYCLE (0x00000020UL) 541 #define SPI_MASTER_INTERDATA_IDLENESS_03CYCLE (0x00000030UL) 542 #define SPI_MASTER_INTERDATA_IDLENESS_04CYCLE (0x00000040UL) 543 #define SPI_MASTER_INTERDATA_IDLENESS_05CYCLE (0x00000050UL) 544 #define SPI_MASTER_INTERDATA_IDLENESS_06CYCLE (0x00000060UL) 545 #define SPI_MASTER_INTERDATA_IDLENESS_07CYCLE (0x00000070UL) 546 #define SPI_MASTER_INTERDATA_IDLENESS_08CYCLE (0x00000080UL) 547 #define SPI_MASTER_INTERDATA_IDLENESS_09CYCLE (0x00000090UL) 548 #define SPI_MASTER_INTERDATA_IDLENESS_10CYCLE (0x000000A0UL) 549 #define SPI_MASTER_INTERDATA_IDLENESS_11CYCLE (0x000000B0UL) 550 #define SPI_MASTER_INTERDATA_IDLENESS_12CYCLE (0x000000C0UL) 551 #define SPI_MASTER_INTERDATA_IDLENESS_13CYCLE (0x000000D0UL) 552 #define SPI_MASTER_INTERDATA_IDLENESS_14CYCLE (0x000000E0UL) 553 #define SPI_MASTER_INTERDATA_IDLENESS_15CYCLE (0x000000F0UL) 554 /** 555 * @} 556 */ 557 558 /** @defgroup SPI_Master_RX_AutoSuspend SPI Master Receiver AutoSuspend 559 * @{ 560 */ 561 #define SPI_MASTER_RX_AUTOSUSP_DISABLE (0x00000000UL) 562 #define SPI_MASTER_RX_AUTOSUSP_ENABLE SPI_CR1_MASRX 563 /** 564 * @} 565 */ 566 567 /** @defgroup SPI_Underrun_Behaviour SPI Underrun Behavior 568 * @{ 569 */ 570 #define SPI_UNDERRUN_BEHAV_REGISTER_PATTERN (0x00000000UL) 571 #define SPI_UNDERRUN_BEHAV_LAST_RECEIVED SPI_CFG1_UDRCFG 572 /** 573 * @} 574 */ 575 576 /** @defgroup SPI_RDY_Master_Management SPI RDY Signal Input Master Management 577 * @{ 578 */ 579 #define SPI_RDY_MASTER_MANAGEMENT_INTERNALLY (0x00000000UL) 580 #define SPI_RDY_MASTER_MANAGEMENT_EXTERNALLY SPI_CFG2_RDIOM 581 /** 582 * @} 583 */ 584 585 /** @defgroup SPI_RDY_Polarity SPI RDY Signal Input/Output Polarity 586 * @{ 587 */ 588 #define SPI_RDY_POLARITY_HIGH (0x00000000UL) 589 #define SPI_RDY_POLARITY_LOW SPI_CFG2_RDIOP 590 /** 591 * @} 592 */ 593 594 /** @defgroup SPI_Interrupt_definition SPI Interrupt Definition 595 * @{ 596 */ 597 #define SPI_IT_RXP SPI_IER_RXPIE 598 #define SPI_IT_TXP SPI_IER_TXPIE 599 #define SPI_IT_DXP SPI_IER_DXPIE 600 #define SPI_IT_EOT SPI_IER_EOTIE 601 #define SPI_IT_TXTF SPI_IER_TXTFIE 602 #define SPI_IT_UDR SPI_IER_UDRIE 603 #define SPI_IT_OVR SPI_IER_OVRIE 604 #define SPI_IT_CRCERR SPI_IER_CRCEIE 605 #define SPI_IT_FRE SPI_IER_TIFREIE 606 #define SPI_IT_MODF SPI_IER_MODFIE 607 #define SPI_IT_ERR (SPI_IT_UDR | SPI_IT_OVR | SPI_IT_FRE | SPI_IT_MODF | SPI_IT_CRCERR) 608 /** 609 * @} 610 */ 611 612 /** @defgroup SPI_Flags_definition SPI Flags Definition 613 * @{ 614 */ 615 #define SPI_FLAG_RXP SPI_SR_RXP /* SPI status flag : Rx-Packet available flag */ 616 #define SPI_FLAG_TXP SPI_SR_TXP /* SPI status flag : Tx-Packet space available flag */ 617 #define SPI_FLAG_DXP SPI_SR_DXP /* SPI status flag : Duplex Packet flag */ 618 #define SPI_FLAG_EOT SPI_SR_EOT /* SPI status flag : End of transfer flag */ 619 #define SPI_FLAG_TXTF SPI_SR_TXTF /* SPI status flag : Transmission Transfer Filled flag */ 620 #define SPI_FLAG_UDR SPI_SR_UDR /* SPI Error flag : Underrun flag */ 621 #define SPI_FLAG_OVR SPI_SR_OVR /* SPI Error flag : Overrun flag */ 622 #define SPI_FLAG_CRCERR SPI_SR_CRCE /* SPI Error flag : CRC error flag */ 623 #define SPI_FLAG_FRE SPI_SR_TIFRE /* SPI Error flag : TI mode frame format error flag */ 624 #define SPI_FLAG_MODF SPI_SR_MODF /* SPI Error flag : Mode fault flag */ 625 #define SPI_FLAG_SUSP SPI_SR_SUSP /* SPI status flag : Transfer suspend complete flag */ 626 #define SPI_FLAG_TXC SPI_SR_TXC /* SPI status flag : TxFIFO transmission complete flag */ 627 #define SPI_FLAG_FRLVL SPI_SR_RXPLVL /* SPI status flag : Fifo reception level flag */ 628 #define SPI_FLAG_RXWNE SPI_SR_RXWNE /* SPI status flag : RxFIFO word not empty flag */ 629 /** 630 * @} 631 */ 632 633 /** @defgroup SPI_reception_fifo_status_level SPI Reception FIFO Status Level 634 * @{ 635 */ 636 #define SPI_RX_FIFO_0PACKET (0x00000000UL) /* 0 or multiple of 4 packets available in the RxFIFO */ 637 #define SPI_RX_FIFO_1PACKET (SPI_SR_RXPLVL_0) 638 #define SPI_RX_FIFO_2PACKET (SPI_SR_RXPLVL_1) 639 #define SPI_RX_FIFO_3PACKET (SPI_SR_RXPLVL_1 | SPI_SR_RXPLVL_0) 640 /** 641 * @} 642 */ 643 644 /** 645 * @} 646 */ 647 648 /* Exported macros -----------------------------------------------------------*/ 649 /** @defgroup SPI_Exported_Macros SPI Exported Macros 650 * @{ 651 */ 652 653 /** @brief Reset SPI handle state. 654 * @param __HANDLE__: specifies the SPI Handle. 655 * This parameter can be SPI where x: 1, 2, 3, 4, 5 or 6 to select the SPI peripheral. 656 * @retval None 657 */ 658 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1UL) 659 #define __HAL_SPI_RESET_HANDLE_STATE(__HANDLE__) do{ \ 660 (__HANDLE__)->State = HAL_SPI_STATE_RESET; \ 661 (__HANDLE__)->MspInitCallback = NULL; \ 662 (__HANDLE__)->MspDeInitCallback = NULL; \ 663 } while(0) 664 #else 665 #define __HAL_SPI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SPI_STATE_RESET) 666 #endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ 667 668 /** @brief Enable the specified SPI interrupts. 669 * @param __HANDLE__: specifies the SPI Handle. 670 * This parameter can be SPI where x: 1, 2, 3, 4, 5 or 6 to select the SPI peripheral. 671 * @param __INTERRUPT__: specifies the interrupt source to enable or disable. 672 * This parameter can be one of the following values: 673 * @arg SPI_IT_RXP : Rx-Packet available interrupt 674 * @arg SPI_IT_TXP : Tx-Packet space available interrupt 675 * @arg SPI_IT_DXP : Duplex Packet interrupt 676 * @arg SPI_IT_EOT : End of transfer interrupt 677 * @arg SPI_IT_TXTF : Transmission Transfer Filled interrupt 678 * @arg SPI_IT_UDR : Underrun interrupt 679 * @arg SPI_IT_OVR : Overrun interrupt 680 * @arg SPI_IT_CRCERR : CRC error interrupt 681 * @arg SPI_IT_FRE : TI mode frame format error interrupt 682 * @arg SPI_IT_MODF : Mode fault interrupt 683 * @arg SPI_IT_ERR : Error interrupt 684 * @retval None 685 */ 686 #define __HAL_SPI_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER |= (__INTERRUPT__)) 687 688 /** @brief Disable the specified SPI interrupts. 689 * @param __HANDLE__: specifies the SPI Handle. 690 * This parameter can be SPI where x: 1, 2, 3, 4, 5 or 6 to select the SPI peripheral. 691 * @param __INTERRUPT__: specifies the interrupt source to enable or disable. 692 * This parameter can be one of the following values: 693 * @arg SPI_IT_RXP : Rx-Packet available interrupt 694 * @arg SPI_IT_TXP : Tx-Packet space available interrupt 695 * @arg SPI_IT_DXP : Duplex Packet interrupt 696 * @arg SPI_IT_EOT : End of transfer interrupt 697 * @arg SPI_IT_TXTF : Transmission Transfer Filled interrupt 698 * @arg SPI_IT_UDR : Underrun interrupt 699 * @arg SPI_IT_OVR : Overrun interrupt 700 * @arg SPI_IT_CRCERR : CRC error interrupt 701 * @arg SPI_IT_FRE : TI mode frame format error interrupt 702 * @arg SPI_IT_MODF : Mode fault interrupt 703 * @arg SPI_IT_ERR : Error interrupt 704 * @retval None 705 */ 706 #define __HAL_SPI_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER &= (~(__INTERRUPT__))) 707 708 /** @brief Check whether the specified SPI interrupt source is enabled or not. 709 * @param __HANDLE__: specifies the SPI Handle. 710 * This parameter can be SPI where x: 1, 2, 3, 4, 5 or 6 to select the SPI peripheral. 711 * @param __INTERRUPT__: specifies the SPI interrupt source to check. 712 * This parameter can be one of the following values: 713 * @arg SPI_IT_RXP : Rx-Packet available interrupt 714 * @arg SPI_IT_TXP : Tx-Packet space available interrupt 715 * @arg SPI_IT_DXP : Duplex Packet interrupt 716 * @arg SPI_IT_EOT : End of transfer interrupt 717 * @arg SPI_IT_TXTF : Transmission Transfer Filled interrupt 718 * @arg SPI_IT_UDR : Underrun interrupt 719 * @arg SPI_IT_OVR : Overrun interrupt 720 * @arg SPI_IT_CRCERR : CRC error interrupt 721 * @arg SPI_IT_FRE : TI mode frame format error interrupt 722 * @arg SPI_IT_MODF : Mode fault interrupt 723 * @arg SPI_IT_ERR : Error interrupt 724 * @retval The new state of __IT__ (TRUE or FALSE). 725 */ 726 #define __HAL_SPI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER & \ 727 (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) 728 729 /** @brief Check whether the specified SPI flag is set or not. 730 * @param __HANDLE__: specifies the SPI Handle. 731 * This parameter can be SPI where x: 1, 2, 3, 4, 5 or 6 to select the SPI peripheral. 732 * @param __FLAG__: specifies the flag to check. 733 * This parameter can be one of the following values: 734 * @arg SPI_FLAG_RXP : Rx-Packet available flag 735 * @arg SPI_FLAG_TXP : Tx-Packet space available flag 736 * @arg SPI_FLAG_DXP : Duplex Packet flag 737 * @arg SPI_FLAG_EOT : End of transfer flag 738 * @arg SPI_FLAG_TXTF : Transmission Transfer Filled flag 739 * @arg SPI_FLAG_UDR : Underrun flag 740 * @arg SPI_FLAG_OVR : Overrun flag 741 * @arg SPI_FLAG_CRCERR : CRC error flag 742 * @arg SPI_FLAG_FRE : TI mode frame format error flag 743 * @arg SPI_FLAG_MODF : Mode fault flag 744 * @arg SPI_FLAG_SUSP : Transfer suspend complete flag 745 * @arg SPI_FLAG_TXC : TxFIFO transmission complete flag 746 * @arg SPI_FLAG_FRLVL : Fifo reception level flag 747 * @arg SPI_FLAG_RXWNE : RxFIFO word not empty flag 748 * @retval The new state of __FLAG__ (TRUE or FALSE). 749 */ 750 #define __HAL_SPI_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__)) 751 752 /** @brief Clear the SPI CRCERR pending flag. 753 * @param __HANDLE__: specifies the SPI Handle. 754 * @retval None 755 */ 756 #define __HAL_SPI_CLEAR_CRCERRFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_CRCEC) 757 758 /** @brief Clear the SPI MODF pending flag. 759 * @param __HANDLE__: specifies the SPI Handle. 760 * @retval None 761 */ 762 #define __HAL_SPI_CLEAR_MODFFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , (uint32_t)(SPI_IFCR_MODFC)); 763 764 /** @brief Clear the SPI OVR pending flag. 765 * @param __HANDLE__: specifies the SPI Handle. 766 * @retval None 767 */ 768 #define __HAL_SPI_CLEAR_OVRFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_OVRC) 769 770 /** @brief Clear the SPI FRE pending flag. 771 * @param __HANDLE__: specifies the SPI Handle. 772 * @retval None 773 */ 774 #define __HAL_SPI_CLEAR_FREFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_TIFREC) 775 776 /** @brief Clear the SPI UDR pending flag. 777 * @param __HANDLE__: specifies the SPI Handle. 778 * @retval None 779 */ 780 #define __HAL_SPI_CLEAR_UDRFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_UDRC) 781 782 /** @brief Clear the SPI EOT pending flag. 783 * @param __HANDLE__: specifies the SPI Handle. 784 * @retval None 785 */ 786 #define __HAL_SPI_CLEAR_EOTFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_EOTC) 787 788 /** @brief Clear the SPI UDR pending flag. 789 * @param __HANDLE__: specifies the SPI Handle. 790 * @retval None 791 */ 792 #define __HAL_SPI_CLEAR_TXTFFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_TXTFC) 793 794 /** @brief Clear the SPI SUSP pending flag. 795 * @param __HANDLE__: specifies the SPI Handle. 796 * @retval None 797 */ 798 #define __HAL_SPI_CLEAR_SUSPFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_SUSPC) 799 800 /** @brief Enable the SPI peripheral. 801 * @param __HANDLE__: specifies the SPI Handle. 802 * @retval None 803 */ 804 #define __HAL_SPI_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR1 , SPI_CR1_SPE) 805 806 /** @brief Disable the SPI peripheral. 807 * @param __HANDLE__: specifies the SPI Handle. 808 * @retval None 809 */ 810 #define __HAL_SPI_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR1 , SPI_CR1_SPE) 811 /** 812 * @} 813 */ 814 815 816 /* Include SPI HAL Extension module */ 817 #include "stm32h5xx_hal_spi_ex.h" 818 819 820 /* Exported functions --------------------------------------------------------*/ 821 /** @addtogroup SPI_Exported_Functions 822 * @{ 823 */ 824 825 /** @addtogroup SPI_Exported_Functions_Group1 Initialization and de-initialization functions 826 * @{ 827 */ 828 /* Initialization/de-initialization functions ********************************/ 829 HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi); 830 HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi); 831 void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi); 832 void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi); 833 834 /* Callbacks Register/UnRegister functions ***********************************/ 835 #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) 836 HAL_StatusTypeDef HAL_SPI_RegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID, 837 pSPI_CallbackTypeDef pCallback); 838 HAL_StatusTypeDef HAL_SPI_UnRegisterCallback(SPI_HandleTypeDef *hspi, HAL_SPI_CallbackIDTypeDef CallbackID); 839 #endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ 840 /** 841 * @} 842 */ 843 844 /** @addtogroup SPI_Exported_Functions_Group2 IO operation functions 845 * @{ 846 */ 847 /* I/O operation functions ***************************************************/ 848 HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size, uint32_t Timeout); 849 HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout); 850 HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8_t *pRxData, 851 uint16_t Size, uint32_t Timeout); 852 HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size); 853 HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size); 854 HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8_t *pRxData, 855 uint16_t Size); 856 857 #if defined(HAL_DMA_MODULE_ENABLED) 858 HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pData, uint16_t Size); 859 HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size); 860 HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8_t *pRxData, 861 uint16_t Size); 862 #endif /* HAL_DMA_MODULE_ENABLED */ 863 864 865 #if defined(HAL_DMA_MODULE_ENABLED) 866 HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi); 867 HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi); 868 HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi); 869 #endif /* HAL_DMA_MODULE_ENABLED */ 870 871 /* Transfer Abort functions */ 872 HAL_StatusTypeDef HAL_SPI_Abort(SPI_HandleTypeDef *hspi); 873 HAL_StatusTypeDef HAL_SPI_Abort_IT(SPI_HandleTypeDef *hspi); 874 875 void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi); 876 void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi); 877 void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi); 878 void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi); 879 void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi); 880 void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi); 881 void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi); 882 void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi); 883 void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi); 884 void HAL_SPI_SuspendCallback(SPI_HandleTypeDef *hspi); 885 /** 886 * @} 887 */ 888 889 /** @addtogroup SPI_Exported_Functions_Group3 Peripheral State and Errors functions 890 * @{ 891 */ 892 893 /* Peripheral State and Error functions ***************************************/ 894 HAL_SPI_StateTypeDef HAL_SPI_GetState(const SPI_HandleTypeDef *hspi); 895 uint32_t HAL_SPI_GetError(const SPI_HandleTypeDef *hspi); 896 /** 897 * @} 898 */ 899 900 /** 901 * @} 902 */ 903 904 /* Private macros ------------------------------------------------------------*/ 905 /** @defgroup SPI_Private_Macros SPI Private Macros 906 * @{ 907 */ 908 909 /** @brief Set the SPI transmit-only mode in 1Line configuration. 910 * @param __HANDLE__: specifies the SPI Handle. 911 * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. 912 * @retval None 913 */ 914 #define SPI_1LINE_TX(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_HDDIR) 915 916 /** @brief Set the SPI receive-only mode in 1Line configuration. 917 * @param __HANDLE__: specifies the SPI Handle. 918 * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. 919 * @retval None 920 */ 921 #define SPI_1LINE_RX(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_HDDIR) 922 923 /** @brief Set the SPI transmit-only mode in 2Lines configuration. 924 * @param __HANDLE__: specifies the SPI Handle. 925 * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. 926 * @retval None 927 */ 928 #define SPI_2LINES_TX(__HANDLE__) MODIFY_REG((__HANDLE__)->Instance->CFG2, SPI_CFG2_COMM, SPI_CFG2_COMM_0) 929 930 /** @brief Set the SPI receive-only mode in 2Lines configuration. 931 * @param __HANDLE__: specifies the SPI Handle. 932 * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. 933 * @retval None 934 */ 935 #define SPI_2LINES_RX(__HANDLE__) MODIFY_REG((__HANDLE__)->Instance->CFG2, SPI_CFG2_COMM, SPI_CFG2_COMM_1) 936 937 /** @brief Set the SPI Transmit-Receive mode in 2Lines configuration. 938 * @param __HANDLE__: specifies the SPI Handle. 939 * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. 940 * @retval None 941 */ 942 #define SPI_2LINES(__HANDLE__) MODIFY_REG((__HANDLE__)->Instance->CFG2, SPI_CFG2_COMM, 0x00000000UL) 943 944 #define IS_SPI_MODE(MODE) (((MODE) == SPI_MODE_SLAVE) || \ 945 ((MODE) == SPI_MODE_MASTER)) 946 947 #define IS_SPI_DIRECTION(MODE) (((MODE) == SPI_DIRECTION_2LINES) || \ 948 ((MODE) == SPI_DIRECTION_2LINES_RXONLY) || \ 949 ((MODE) == SPI_DIRECTION_1LINE) || \ 950 ((MODE) == SPI_DIRECTION_2LINES_TXONLY)) 951 952 #define IS_SPI_DIRECTION_2LINES(MODE) ((MODE) == SPI_DIRECTION_2LINES) 953 954 #define IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_TXONLY(MODE) (((MODE) == SPI_DIRECTION_2LINES)|| \ 955 ((MODE) == SPI_DIRECTION_1LINE) || \ 956 ((MODE) == SPI_DIRECTION_2LINES_TXONLY)) 957 958 #define IS_SPI_DIRECTION_2LINES_OR_1LINE_2LINES_RXONLY(MODE) (((MODE) == SPI_DIRECTION_2LINES)|| \ 959 ((MODE) == SPI_DIRECTION_1LINE) || \ 960 ((MODE) == SPI_DIRECTION_2LINES_RXONLY)) 961 962 #define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DATASIZE_32BIT) || \ 963 ((DATASIZE) == SPI_DATASIZE_31BIT) || \ 964 ((DATASIZE) == SPI_DATASIZE_30BIT) || \ 965 ((DATASIZE) == SPI_DATASIZE_29BIT) || \ 966 ((DATASIZE) == SPI_DATASIZE_28BIT) || \ 967 ((DATASIZE) == SPI_DATASIZE_27BIT) || \ 968 ((DATASIZE) == SPI_DATASIZE_26BIT) || \ 969 ((DATASIZE) == SPI_DATASIZE_25BIT) || \ 970 ((DATASIZE) == SPI_DATASIZE_24BIT) || \ 971 ((DATASIZE) == SPI_DATASIZE_23BIT) || \ 972 ((DATASIZE) == SPI_DATASIZE_22BIT) || \ 973 ((DATASIZE) == SPI_DATASIZE_21BIT) || \ 974 ((DATASIZE) == SPI_DATASIZE_20BIT) || \ 975 ((DATASIZE) == SPI_DATASIZE_22BIT) || \ 976 ((DATASIZE) == SPI_DATASIZE_19BIT) || \ 977 ((DATASIZE) == SPI_DATASIZE_18BIT) || \ 978 ((DATASIZE) == SPI_DATASIZE_17BIT) || \ 979 ((DATASIZE) == SPI_DATASIZE_16BIT) || \ 980 ((DATASIZE) == SPI_DATASIZE_15BIT) || \ 981 ((DATASIZE) == SPI_DATASIZE_14BIT) || \ 982 ((DATASIZE) == SPI_DATASIZE_13BIT) || \ 983 ((DATASIZE) == SPI_DATASIZE_12BIT) || \ 984 ((DATASIZE) == SPI_DATASIZE_11BIT) || \ 985 ((DATASIZE) == SPI_DATASIZE_10BIT) || \ 986 ((DATASIZE) == SPI_DATASIZE_9BIT) || \ 987 ((DATASIZE) == SPI_DATASIZE_8BIT) || \ 988 ((DATASIZE) == SPI_DATASIZE_7BIT) || \ 989 ((DATASIZE) == SPI_DATASIZE_6BIT) || \ 990 ((DATASIZE) == SPI_DATASIZE_5BIT) || \ 991 ((DATASIZE) == SPI_DATASIZE_4BIT)) 992 993 /** 994 * @brief DataSize for limited instance 995 */ 996 #define IS_SPI_LIMITED_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DATASIZE_16BIT) || \ 997 ((DATASIZE) == SPI_DATASIZE_8BIT)) 998 999 #define IS_SPI_FIFOTHRESHOLD(THRESHOLD) (((THRESHOLD) == SPI_FIFO_THRESHOLD_01DATA) || \ 1000 ((THRESHOLD) == SPI_FIFO_THRESHOLD_02DATA) || \ 1001 ((THRESHOLD) == SPI_FIFO_THRESHOLD_03DATA) || \ 1002 ((THRESHOLD) == SPI_FIFO_THRESHOLD_04DATA) || \ 1003 ((THRESHOLD) == SPI_FIFO_THRESHOLD_05DATA) || \ 1004 ((THRESHOLD) == SPI_FIFO_THRESHOLD_06DATA) || \ 1005 ((THRESHOLD) == SPI_FIFO_THRESHOLD_07DATA) || \ 1006 ((THRESHOLD) == SPI_FIFO_THRESHOLD_08DATA) || \ 1007 ((THRESHOLD) == SPI_FIFO_THRESHOLD_09DATA) || \ 1008 ((THRESHOLD) == SPI_FIFO_THRESHOLD_10DATA) || \ 1009 ((THRESHOLD) == SPI_FIFO_THRESHOLD_11DATA) || \ 1010 ((THRESHOLD) == SPI_FIFO_THRESHOLD_12DATA) || \ 1011 ((THRESHOLD) == SPI_FIFO_THRESHOLD_13DATA) || \ 1012 ((THRESHOLD) == SPI_FIFO_THRESHOLD_14DATA) || \ 1013 ((THRESHOLD) == SPI_FIFO_THRESHOLD_15DATA) || \ 1014 ((THRESHOLD) == SPI_FIFO_THRESHOLD_16DATA)) 1015 1016 /** 1017 * @brief FifoThreshold for limited instance 1018 */ 1019 #define IS_SPI_LIMITED_FIFOTHRESHOLD(THRESHOLD) (((THRESHOLD) == SPI_FIFO_THRESHOLD_01DATA) || \ 1020 ((THRESHOLD) == SPI_FIFO_THRESHOLD_02DATA) || \ 1021 ((THRESHOLD) == SPI_FIFO_THRESHOLD_03DATA) || \ 1022 ((THRESHOLD) == SPI_FIFO_THRESHOLD_04DATA) || \ 1023 ((THRESHOLD) == SPI_FIFO_THRESHOLD_05DATA) || \ 1024 ((THRESHOLD) == SPI_FIFO_THRESHOLD_06DATA) || \ 1025 ((THRESHOLD) == SPI_FIFO_THRESHOLD_07DATA) || \ 1026 ((THRESHOLD) == SPI_FIFO_THRESHOLD_08DATA)) 1027 1028 #define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_POLARITY_LOW) || \ 1029 ((CPOL) == SPI_POLARITY_HIGH)) 1030 1031 #define IS_SPI_CPHA(CPHA) (((CPHA) == SPI_PHASE_1EDGE) || \ 1032 ((CPHA) == SPI_PHASE_2EDGE)) 1033 1034 #define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_SOFT) || \ 1035 ((NSS) == SPI_NSS_HARD_INPUT) || \ 1036 ((NSS) == SPI_NSS_HARD_OUTPUT)) 1037 1038 #define IS_SPI_NSSP(NSSP) (((NSSP) == SPI_NSS_PULSE_ENABLE) || \ 1039 ((NSSP) == SPI_NSS_PULSE_DISABLE)) 1040 1041 #define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BAUDRATEPRESCALER_BYPASS) || \ 1042 ((PRESCALER) == SPI_BAUDRATEPRESCALER_2) || \ 1043 ((PRESCALER) == SPI_BAUDRATEPRESCALER_4) || \ 1044 ((PRESCALER) == SPI_BAUDRATEPRESCALER_8) || \ 1045 ((PRESCALER) == SPI_BAUDRATEPRESCALER_16) || \ 1046 ((PRESCALER) == SPI_BAUDRATEPRESCALER_32) || \ 1047 ((PRESCALER) == SPI_BAUDRATEPRESCALER_64) || \ 1048 ((PRESCALER) == SPI_BAUDRATEPRESCALER_128) || \ 1049 ((PRESCALER) == SPI_BAUDRATEPRESCALER_256)) 1050 1051 #define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FIRSTBIT_MSB) || \ 1052 ((BIT) == SPI_FIRSTBIT_LSB)) 1053 1054 #define IS_SPI_TIMODE(MODE) (((MODE) == SPI_TIMODE_DISABLE) || \ 1055 ((MODE) == SPI_TIMODE_ENABLE)) 1056 1057 #define IS_SPI_CRC_CALCULATION(CALCULATION) (((CALCULATION) == SPI_CRCCALCULATION_DISABLE) || \ 1058 ((CALCULATION) == SPI_CRCCALCULATION_ENABLE)) 1059 1060 #define IS_SPI_CRC_INITIALIZATION_PATTERN(PATTERN) (((PATTERN) == SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN) || \ 1061 ((PATTERN) == SPI_CRC_INITIALIZATION_ALL_ONE_PATTERN)) 1062 1063 #define IS_SPI_CRC_LENGTH(LENGTH) (((LENGTH) == SPI_CRC_LENGTH_DATASIZE) || \ 1064 ((LENGTH) == SPI_CRC_LENGTH_32BIT) || \ 1065 ((LENGTH) == SPI_CRC_LENGTH_31BIT) || \ 1066 ((LENGTH) == SPI_CRC_LENGTH_30BIT) || \ 1067 ((LENGTH) == SPI_CRC_LENGTH_29BIT) || \ 1068 ((LENGTH) == SPI_CRC_LENGTH_28BIT) || \ 1069 ((LENGTH) == SPI_CRC_LENGTH_27BIT) || \ 1070 ((LENGTH) == SPI_CRC_LENGTH_26BIT) || \ 1071 ((LENGTH) == SPI_CRC_LENGTH_25BIT) || \ 1072 ((LENGTH) == SPI_CRC_LENGTH_24BIT) || \ 1073 ((LENGTH) == SPI_CRC_LENGTH_23BIT) || \ 1074 ((LENGTH) == SPI_CRC_LENGTH_22BIT) || \ 1075 ((LENGTH) == SPI_CRC_LENGTH_21BIT) || \ 1076 ((LENGTH) == SPI_CRC_LENGTH_20BIT) || \ 1077 ((LENGTH) == SPI_CRC_LENGTH_19BIT) || \ 1078 ((LENGTH) == SPI_CRC_LENGTH_18BIT) || \ 1079 ((LENGTH) == SPI_CRC_LENGTH_17BIT) || \ 1080 ((LENGTH) == SPI_CRC_LENGTH_16BIT) || \ 1081 ((LENGTH) == SPI_CRC_LENGTH_15BIT) || \ 1082 ((LENGTH) == SPI_CRC_LENGTH_14BIT) || \ 1083 ((LENGTH) == SPI_CRC_LENGTH_13BIT) || \ 1084 ((LENGTH) == SPI_CRC_LENGTH_12BIT) || \ 1085 ((LENGTH) == SPI_CRC_LENGTH_11BIT) || \ 1086 ((LENGTH) == SPI_CRC_LENGTH_10BIT) || \ 1087 ((LENGTH) == SPI_CRC_LENGTH_9BIT) || \ 1088 ((LENGTH) == SPI_CRC_LENGTH_8BIT) || \ 1089 ((LENGTH) == SPI_CRC_LENGTH_7BIT) || \ 1090 ((LENGTH) == SPI_CRC_LENGTH_6BIT) || \ 1091 ((LENGTH) == SPI_CRC_LENGTH_5BIT) || \ 1092 ((LENGTH) == SPI_CRC_LENGTH_4BIT)) 1093 1094 1095 #define IS_SPI_LIMITED_TRANSFER_SIZE(SIZE) (((SIZE) < 0x3FFU) && ((SIZE) != 0U)) 1096 1097 /** 1098 * @brief CRC Length for limited instance 1099 */ 1100 #define IS_SPI_LIMITED_CRC_LENGTH(LENGTH) (((LENGTH) == SPI_CRC_LENGTH_8BIT) || \ 1101 ((LENGTH) == SPI_CRC_LENGTH_16BIT)) 1102 1103 1104 #define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL) ((POLYNOMIAL) > 0x0UL) 1105 1106 #define IS_SPI_CRC_POLYNOMIAL_SIZE(POLYNOM, LENGTH) (((POLYNOM) >> (((LENGTH) >> SPI_CFG1_CRCSIZE_Pos) + 1UL)) == 0UL) 1107 1108 1109 1110 #define IS_SPI_UNDERRUN_BEHAVIOUR(MODE) (((MODE) == SPI_UNDERRUN_BEHAV_REGISTER_PATTERN) || \ 1111 ((MODE) == SPI_UNDERRUN_BEHAV_LAST_RECEIVED)) 1112 1113 #define IS_SPI_RDY_MASTER_MANAGEMENT(MANAGEMENT) (((MANAGEMENT) == SPI_RDY_MASTER_MANAGEMENT_INTERNALLY) || \ 1114 ((MANAGEMENT) == SPI_RDY_MASTER_MANAGEMENT_EXTERNALLY)) 1115 1116 #define IS_SPI_RDY_POLARITY(POLARITY) (((POLARITY) == SPI_RDY_POLARITY_HIGH) || \ 1117 ((POLARITY) == SPI_RDY_POLARITY_LOW)) 1118 1119 #define IS_SPI_MASTER_RX_AUTOSUSP(MODE) (((MODE) == SPI_MASTER_RX_AUTOSUSP_DISABLE) || \ 1120 ((MODE) == SPI_MASTER_RX_AUTOSUSP_ENABLE)) 1121 1122 #define IS_SPI_TRANSFER_SIZE(SIZE) (((SIZE) < 0xFFFFU) && ((SIZE) != 0U)) 1123 /** 1124 * @} 1125 */ 1126 1127 /** 1128 * @} 1129 */ 1130 1131 /** 1132 * @} 1133 */ 1134 1135 #ifdef __cplusplus 1136 } 1137 #endif 1138 1139 #endif /* STM32H5xx_HAL_SPI_H */ 1140 1141 /** 1142 * @} 1143 */ 1144