STM CMSIS
stm32f4xx_hal_spi.h
Go to the documentation of this file.
1 
38 /* Define to prevent recursive inclusion -------------------------------------*/
39 #ifndef __STM32F4xx_HAL_SPI_H
40 #define __STM32F4xx_HAL_SPI_H
41 
42 #ifdef __cplusplus
43  extern "C" {
44 #endif
45 
46 /* Includes ------------------------------------------------------------------*/
47 #include "stm32f4xx_hal_def.h"
48 
57 /* Exported types ------------------------------------------------------------*/
65 typedef struct
66 {
67  uint32_t Mode;
70  uint32_t Direction;
73  uint32_t DataSize;
76  uint32_t CLKPolarity;
79  uint32_t CLKPhase;
82  uint32_t NSS;
86  uint32_t BaudRatePrescaler;
92  uint32_t FirstBit;
95  uint32_t TIMode;
98  uint32_t CRCCalculation;
101  uint32_t CRCPolynomial;
104 
108 typedef enum
109 {
118 
122 typedef struct __SPI_HandleTypeDef
123 {
124  SPI_TypeDef *Instance; /* SPI registers base address */
125 
126  SPI_InitTypeDef Init; /* SPI communication parameters */
127 
128  uint8_t *pTxBuffPtr; /* Pointer to SPI Tx transfer Buffer */
129 
130  uint16_t TxXferSize; /* SPI Tx Transfer size */
131 
132  __IO uint16_t TxXferCount; /* SPI Tx Transfer Counter */
133 
134  uint8_t *pRxBuffPtr; /* Pointer to SPI Rx transfer Buffer */
135 
136  uint16_t RxXferSize; /* SPI Rx Transfer size */
137 
138  __IO uint16_t RxXferCount; /* SPI Rx Transfer Counter */
139 
140  void (*RxISR)(struct __SPI_HandleTypeDef * hspi); /* function pointer on Rx ISR */
141 
142  void (*TxISR)(struct __SPI_HandleTypeDef * hspi); /* function pointer on Tx ISR */
143 
144  DMA_HandleTypeDef *hdmatx; /* SPI Tx DMA Handle parameters */
145 
146  DMA_HandleTypeDef *hdmarx; /* SPI Rx DMA Handle parameters */
147 
148  HAL_LockTypeDef Lock; /* Locking object */
149 
150  __IO HAL_SPI_StateTypeDef State; /* SPI communication state */
151 
152  __IO uint32_t ErrorCode; /* SPI Error code */
153 
155 
160 /* Exported constants --------------------------------------------------------*/
168 #define HAL_SPI_ERROR_NONE ((uint32_t)0x00000000U)
169 #define HAL_SPI_ERROR_MODF ((uint32_t)0x00000001U)
170 #define HAL_SPI_ERROR_CRC ((uint32_t)0x00000002U)
171 #define HAL_SPI_ERROR_OVR ((uint32_t)0x00000004U)
172 #define HAL_SPI_ERROR_FRE ((uint32_t)0x00000008U)
173 #define HAL_SPI_ERROR_DMA ((uint32_t)0x00000010U)
174 #define HAL_SPI_ERROR_FLAG ((uint32_t)0x00000020U)
182 #define SPI_MODE_SLAVE ((uint32_t)0x00000000U)
183 #define SPI_MODE_MASTER (SPI_CR1_MSTR | SPI_CR1_SSI)
184 
191 #define SPI_DIRECTION_2LINES ((uint32_t)0x00000000U)
192 #define SPI_DIRECTION_2LINES_RXONLY SPI_CR1_RXONLY
193 #define SPI_DIRECTION_1LINE SPI_CR1_BIDIMODE
194 
201 #define SPI_DATASIZE_8BIT ((uint32_t)0x00000000U)
202 #define SPI_DATASIZE_16BIT SPI_CR1_DFF
203 
210 #define SPI_POLARITY_LOW ((uint32_t)0x00000000U)
211 #define SPI_POLARITY_HIGH SPI_CR1_CPOL
212 
219 #define SPI_PHASE_1EDGE ((uint32_t)0x00000000U)
220 #define SPI_PHASE_2EDGE SPI_CR1_CPHA
221 
228 #define SPI_NSS_SOFT SPI_CR1_SSM
229 #define SPI_NSS_HARD_INPUT ((uint32_t)0x00000000U)
230 #define SPI_NSS_HARD_OUTPUT ((uint32_t)0x00040000U)
231 
238 #define SPI_BAUDRATEPRESCALER_2 ((uint32_t)0x00000000U)
239 #define SPI_BAUDRATEPRESCALER_4 ((uint32_t)0x00000008U)
240 #define SPI_BAUDRATEPRESCALER_8 ((uint32_t)0x00000010U)
241 #define SPI_BAUDRATEPRESCALER_16 ((uint32_t)0x00000018U)
242 #define SPI_BAUDRATEPRESCALER_32 ((uint32_t)0x00000020U)
243 #define SPI_BAUDRATEPRESCALER_64 ((uint32_t)0x00000028U)
244 #define SPI_BAUDRATEPRESCALER_128 ((uint32_t)0x00000030U)
245 #define SPI_BAUDRATEPRESCALER_256 ((uint32_t)0x00000038U)
246 
253 #define SPI_FIRSTBIT_MSB ((uint32_t)0x00000000U)
254 #define SPI_FIRSTBIT_LSB SPI_CR1_LSBFIRST
255 
262 #define SPI_TIMODE_DISABLE ((uint32_t)0x00000000U)
263 #define SPI_TIMODE_ENABLE SPI_CR2_FRF
264 
271 #define SPI_CRCCALCULATION_DISABLE ((uint32_t)0x00000000U)
272 #define SPI_CRCCALCULATION_ENABLE SPI_CR1_CRCEN
273 
280 #define SPI_IT_TXE SPI_CR2_TXEIE
281 #define SPI_IT_RXNE SPI_CR2_RXNEIE
282 #define SPI_IT_ERR SPI_CR2_ERRIE
283 
290 #define SPI_FLAG_RXNE SPI_SR_RXNE /* SPI status flag: Rx buffer not empty flag */
291 #define SPI_FLAG_TXE SPI_SR_TXE /* SPI status flag: Tx buffer empty flag */
292 #define SPI_FLAG_BSY SPI_SR_BSY /* SPI status flag: Busy flag */
293 #define SPI_FLAG_CRCERR SPI_SR_CRCERR /* SPI Error flag: CRC error flag */
294 #define SPI_FLAG_MODF SPI_SR_MODF /* SPI Error flag: Mode fault flag */
295 #define SPI_FLAG_OVR SPI_SR_OVR /* SPI Error flag: Overrun flag */
296 #define SPI_FLAG_FRE SPI_SR_FRE /* SPI Error flag: TI mode frame format error flag */
297 
305 /* Exported macro ------------------------------------------------------------*/
315 #define __HAL_SPI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SPI_STATE_RESET)
316 
327 #define __HAL_SPI_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR2 |= (__INTERRUPT__))
328 #define __HAL_SPI_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR2 &= (~(__INTERRUPT__)))
329 
340 #define __HAL_SPI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR2 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
341 
356 #define __HAL_SPI_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))
357 
363 #define __HAL_SPI_CLEAR_CRCERRFLAG(__HANDLE__) ((__HANDLE__)->Instance->SR = (uint16_t)(~SPI_FLAG_CRCERR))
364 
370 #define __HAL_SPI_CLEAR_MODFFLAG(__HANDLE__) \
371  do{ \
372  __IO uint32_t tmpreg_modf = 0x00U; \
373  tmpreg_modf = (__HANDLE__)->Instance->SR; \
374  (__HANDLE__)->Instance->CR1 &= (~SPI_CR1_SPE); \
375  UNUSED(tmpreg_modf); \
376  } while(0)
377 
383 #define __HAL_SPI_CLEAR_OVRFLAG(__HANDLE__) \
384  do{ \
385  __IO uint32_t tmpreg_ovr = 0x00U; \
386  tmpreg_ovr = (__HANDLE__)->Instance->DR; \
387  tmpreg_ovr = (__HANDLE__)->Instance->SR; \
388  UNUSED(tmpreg_ovr); \
389  } while(0)
390 
396 #define __HAL_SPI_CLEAR_FREFLAG(__HANDLE__) \
397  do{ \
398  __IO uint32_t tmpreg_fre = 0x00U; \
399  tmpreg_fre = (__HANDLE__)->Instance->SR; \
400  UNUSED(tmpreg_fre); \
401  }while(0)
402 
408 #define __HAL_SPI_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= SPI_CR1_SPE)
409 
415 #define __HAL_SPI_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= (~SPI_CR1_SPE))
416 
420 /* Exported functions --------------------------------------------------------*/
428 /* Initialization/de-initialization functions **********************************/
429 HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi);
430 HAL_StatusTypeDef HAL_SPI_DeInit (SPI_HandleTypeDef *hspi);
431 void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi);
432 void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi);
440 /* I/O operation functions *****************************************************/
441 HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
442 HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
443 HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
444 HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
445 HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
446 HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
447 HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
448 HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
449 HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
450 HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi);
451 HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi);
452 HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi);
453 
454 void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi);
455 void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi);
456 void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi);
457 void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi);
458 void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi);
459 void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi);
460 void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi);
461 void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi);
469 /* Peripheral State and Error functions ***************************************/
470 HAL_SPI_StateTypeDef HAL_SPI_GetState(SPI_HandleTypeDef *hspi);
471 uint32_t HAL_SPI_GetError(SPI_HandleTypeDef *hspi);
480 /* Private types -------------------------------------------------------------*/
481 /* Private variables ---------------------------------------------------------*/
482 /* Private constants ---------------------------------------------------------*/
483 
484 /* Private macros ------------------------------------------------------------*/
494 #define SPI_1LINE_TX(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= SPI_CR1_BIDIOE)
495 
501 #define SPI_1LINE_RX(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= (~SPI_CR1_BIDIOE))
502 
508 #define SPI_RESET_CRC(__HANDLE__) do{(__HANDLE__)->Instance->CR1 &= (uint16_t)(~SPI_CR1_CRCEN);\
509  (__HANDLE__)->Instance->CR1 |= SPI_CR1_CRCEN;}while(0)
510 
511 #define IS_SPI_MODE(MODE) (((MODE) == SPI_MODE_SLAVE) || \
512  ((MODE) == SPI_MODE_MASTER))
513 
514 #define IS_SPI_DIRECTION(MODE) (((MODE) == SPI_DIRECTION_2LINES) || \
515  ((MODE) == SPI_DIRECTION_2LINES_RXONLY) || \
516  ((MODE) == SPI_DIRECTION_1LINE))
517 
518 #define IS_SPI_DIRECTION_2LINES(MODE) ((MODE) == SPI_DIRECTION_2LINES)
519 
520 #define IS_SPI_DIRECTION_2LINES_OR_1LINE(MODE) (((MODE) == SPI_DIRECTION_2LINES) || \
521  ((MODE) == SPI_DIRECTION_1LINE))
522 
523 #define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DATASIZE_16BIT) || \
524  ((DATASIZE) == SPI_DATASIZE_8BIT))
525 
526 #define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_POLARITY_LOW) || \
527  ((CPOL) == SPI_POLARITY_HIGH))
528 
529 #define IS_SPI_CPHA(CPHA) (((CPHA) == SPI_PHASE_1EDGE) || \
530  ((CPHA) == SPI_PHASE_2EDGE))
531 
532 #define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_SOFT) || \
533  ((NSS) == SPI_NSS_HARD_INPUT) || \
534  ((NSS) == SPI_NSS_HARD_OUTPUT))
535 
536 #define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BAUDRATEPRESCALER_2) || \
537  ((PRESCALER) == SPI_BAUDRATEPRESCALER_4) || \
538  ((PRESCALER) == SPI_BAUDRATEPRESCALER_8) || \
539  ((PRESCALER) == SPI_BAUDRATEPRESCALER_16) || \
540  ((PRESCALER) == SPI_BAUDRATEPRESCALER_32) || \
541  ((PRESCALER) == SPI_BAUDRATEPRESCALER_64) || \
542  ((PRESCALER) == SPI_BAUDRATEPRESCALER_128) || \
543  ((PRESCALER) == SPI_BAUDRATEPRESCALER_256))
544 
545 #define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FIRSTBIT_MSB) || \
546  ((BIT) == SPI_FIRSTBIT_LSB))
547 
548 #define IS_SPI_TIMODE(MODE) (((MODE) == SPI_TIMODE_DISABLE) || \
549  ((MODE) == SPI_TIMODE_ENABLE))
550 
551 #define IS_SPI_CRC_CALCULATION(CALCULATION) (((CALCULATION) == SPI_CRCCALCULATION_DISABLE) || \
552  ((CALCULATION) == SPI_CRCCALCULATION_ENABLE))
553 
554 #define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL) (((POLYNOMIAL) >= 0x01U) && ((POLYNOMIAL) <= 0xFFFFU))
555 
560 /* Private functions ---------------------------------------------------------*/
577 #ifdef __cplusplus
578 }
579 #endif
580 
581 #endif /* __STM32F4xx_HAL_SPI_H */
582 
583 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Serial Peripheral Interface.
Definition: stm32f401xc.h:472
Definition: stm32f4xx_hal_spi.h:115
uint32_t CLKPhase
Definition: stm32f4xx_hal_spi.h:79
This file contains HAL common defines, enumeration, macros and structures definitions.
Definition: stm32f4xx_hal_spi.h:112
uint32_t CLKPolarity
Definition: stm32f4xx_hal_spi.h:76
Definition: stm32f4xx_hal_spi.h:110
uint32_t CRCPolynomial
Definition: stm32f4xx_hal_spi.h:101
struct __SPI_HandleTypeDef SPI_HandleTypeDef
SPI handle Structure definition.
HAL_StatusTypeDef
HAL Status structures definition.
Definition: stm32f4xx_hal_def.h:57
SPI handle Structure definition.
Definition: stm32f4xx_hal_spi.h:122
#define __IO
Definition: core_cm0.h:213
Definition: stm32f4xx_hal_spi.h:113
uint32_t TIMode
Definition: stm32f4xx_hal_spi.h:95
Definition: stm32f4xx_hal_spi.h:116
uint32_t FirstBit
Definition: stm32f4xx_hal_spi.h:92
uint32_t DataSize
Definition: stm32f4xx_hal_spi.h:73
SPI Configuration Structure definition.
Definition: stm32f4xx_hal_spi.h:65
HAL_LockTypeDef
HAL Lock structures definition.
Definition: stm32f4xx_hal_def.h:68
Definition: stm32f4xx_hal_spi.h:114
Definition: stm32f4xx_hal_spi.h:111
DMA handle Structure definition.
Definition: stm32f4xx_hal_dma.h:157
uint32_t CRCCalculation
Definition: stm32f4xx_hal_spi.h:98
uint32_t Direction
Definition: stm32f4xx_hal_spi.h:70
uint32_t BaudRatePrescaler
Definition: stm32f4xx_hal_spi.h:86
uint32_t Mode
Definition: stm32f4xx_hal_spi.h:67
uint32_t NSS
Definition: stm32f4xx_hal_spi.h:82
HAL_SPI_StateTypeDef
HAL SPI State structure definition.
Definition: stm32f4xx_hal_spi.h:108