You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

697 lines
28 KiB

  1. /**
  2. ******************************************************************************
  3. * @file stm32f7xx_hal_spi.h
  4. * @author MCD Application Team
  5. * @version V1.0.1
  6. * @date 25-June-2015
  7. * @brief Header file of SPI HAL module.
  8. ******************************************************************************
  9. * @attention
  10. *
  11. * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
  12. *
  13. * Redistribution and use in source and binary forms, with or without modification,
  14. * are permitted provided that the following conditions are met:
  15. * 1. Redistributions of source code must retain the above copyright notice,
  16. * this list of conditions and the following disclaimer.
  17. * 2. Redistributions in binary form must reproduce the above copyright notice,
  18. * this list of conditions and the following disclaimer in the documentation
  19. * and/or other materials provided with the distribution.
  20. * 3. Neither the name of STMicroelectronics nor the names of its contributors
  21. * may be used to endorse or promote products derived from this software
  22. * without specific prior written permission.
  23. *
  24. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  25. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  27. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  28. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  29. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  30. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  31. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  32. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  33. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  34. *
  35. ******************************************************************************
  36. */
  37. /* Define to prevent recursive inclusion -------------------------------------*/
  38. #ifndef __STM32F7xx_HAL_SPI_H
  39. #define __STM32F7xx_HAL_SPI_H
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43. /* Includes ------------------------------------------------------------------*/
  44. #include "stm32f7xx_hal_def.h"
  45. /** @addtogroup STM32F7xx_HAL_Driver
  46. * @{
  47. */
  48. /** @addtogroup SPI
  49. * @{
  50. */
  51. /* Exported types ------------------------------------------------------------*/
  52. /** @defgroup SPI_Exported_Types SPI Exported Types
  53. * @{
  54. */
  55. /**
  56. * @brief SPI Configuration Structure definition
  57. */
  58. typedef struct
  59. {
  60. uint32_t Mode; /*!< Specifies the SPI operating mode.
  61. This parameter can be a value of @ref SPI_Mode */
  62. uint32_t Direction; /*!< Specifies the SPI bidirectional mode state.
  63. This parameter can be a value of @ref SPI_Direction */
  64. uint32_t DataSize; /*!< Specifies the SPI data size.
  65. This parameter can be a value of @ref SPI_Data_Size */
  66. uint32_t CLKPolarity; /*!< Specifies the serial clock steady state.
  67. This parameter can be a value of @ref SPI_Clock_Polarity */
  68. uint32_t CLKPhase; /*!< Specifies the clock active edge for the bit capture.
  69. This parameter can be a value of @ref SPI_Clock_Phase */
  70. uint32_t NSS; /*!< Specifies whether the NSS signal is managed by
  71. hardware (NSS pin) or by software using the SSI bit.
  72. This parameter can be a value of @ref SPI_Slave_Select_management */
  73. uint32_t BaudRatePrescaler; /*!< Specifies the Baud Rate prescaler value which will be
  74. used to configure the transmit and receive SCK clock.
  75. This parameter can be a value of @ref SPI_BaudRate_Prescaler
  76. @note The communication clock is derived from the master
  77. clock. The slave clock does not need to be set. */
  78. uint32_t FirstBit; /*!< Specifies whether data transfers start from MSB or LSB bit.
  79. This parameter can be a value of @ref SPI_MSB_LSB_transmission */
  80. uint32_t TIMode; /*!< Specifies if the TI mode is enabled or not .
  81. This parameter can be a value of @ref SPI_TI_mode */
  82. uint32_t CRCCalculation; /*!< Specifies if the CRC calculation is enabled or not.
  83. This parameter can be a value of @ref SPI_CRC_Calculation */
  84. uint32_t CRCPolynomial; /*!< Specifies the polynomial used for the CRC calculation.
  85. This parameter must be a number between Min_Data = 0 and Max_Data = 65535 */
  86. uint32_t CRCLength; /*!< Specifies the CRC Length used for the CRC calculation.
  87. CRC Length is only used with Data8 and Data16, not other data size
  88. This parameter can be a value of @ref SPI_CRC_length */
  89. uint32_t NSSPMode; /*!< Specifies whether the NSSP signal is enabled or not .
  90. This parameter can be a value of @ref SPI_NSSP_Mode
  91. This mode is activated by the NSSP bit in the SPIx_CR2 register and
  92. it takes effect only if the SPI interface is configured as Motorola SPI
  93. master (FRF=0) with capture on the first edge (SPIx_CR1 CPHA = 0,
  94. CPOL setting is ignored).. */
  95. } SPI_InitTypeDef;
  96. /**
  97. * @brief HAL State structures definition
  98. */
  99. typedef enum
  100. {
  101. HAL_SPI_STATE_RESET = 0x00, /*!< Peripheral not Initialized */
  102. HAL_SPI_STATE_READY = 0x01, /*!< Peripheral Initialized and ready for use */
  103. HAL_SPI_STATE_BUSY = 0x02, /*!< an internal process is ongoing */
  104. HAL_SPI_STATE_BUSY_TX = 0x03, /*!< Data Transmission process is ongoing */
  105. HAL_SPI_STATE_BUSY_RX = 0x04, /*!< Data Reception process is ongoing */
  106. HAL_SPI_STATE_BUSY_TX_RX = 0x05, /*!< Data Transmission and Reception process is ongoing*/
  107. HAL_SPI_STATE_ERROR = 0x06 /*!< SPI error state */
  108. }HAL_SPI_StateTypeDef;
  109. /**
  110. * @brief SPI handle Structure definition
  111. */
  112. typedef struct __SPI_HandleTypeDef
  113. {
  114. SPI_TypeDef *Instance; /* SPI registers base address */
  115. SPI_InitTypeDef Init; /* SPI communication parameters */
  116. uint8_t *pTxBuffPtr; /* Pointer to SPI Tx transfer Buffer */
  117. uint16_t TxXferSize; /* SPI Tx Transfer size */
  118. uint16_t TxXferCount; /* SPI Tx Transfer Counter */
  119. uint8_t *pRxBuffPtr; /* Pointer to SPI Rx transfer Buffer */
  120. uint16_t RxXferSize; /* SPI Rx Transfer size */
  121. uint16_t RxXferCount; /* SPI Rx Transfer Counter */
  122. uint32_t CRCSize; /* SPI CRC size used for the transfer */
  123. void (*RxISR)(struct __SPI_HandleTypeDef *hspi); /* function pointer on Rx IRQ handler */
  124. void (*TxISR)(struct __SPI_HandleTypeDef *hspi); /* function pointer on Tx IRQ handler */
  125. DMA_HandleTypeDef *hdmatx; /* SPI Tx DMA Handle parameters */
  126. DMA_HandleTypeDef *hdmarx; /* SPI Rx DMA Handle parameters */
  127. HAL_LockTypeDef Lock; /* Locking object */
  128. HAL_SPI_StateTypeDef State; /* SPI communication state */
  129. uint32_t ErrorCode; /* SPI Error code */
  130. }SPI_HandleTypeDef;
  131. /**
  132. * @}
  133. */
  134. /* Exported constants --------------------------------------------------------*/
  135. /** @defgroup SPI_Exported_Constants SPI Exported Constants
  136. * @{
  137. */
  138. /** @defgroup SPI_Error_Code SPI Error Code
  139. * @{
  140. */
  141. #define HAL_SPI_ERROR_NONE (uint32_t)0x00000000 /*!< No error */
  142. #define HAL_SPI_ERROR_MODF (uint32_t)0x00000001 /*!< MODF error */
  143. #define HAL_SPI_ERROR_CRC (uint32_t)0x00000002 /*!< CRC error */
  144. #define HAL_SPI_ERROR_OVR (uint32_t)0x00000004 /*!< OVR error */
  145. #define HAL_SPI_ERROR_FRE (uint32_t)0x00000008 /*!< FRE error */
  146. #define HAL_SPI_ERROR_DMA (uint32_t)0x00000010 /*!< DMA transfer error */
  147. #define HAL_SPI_ERROR_FLAG (uint32_t)0x00000020 /*!< Error on BSY/TXE/FTLVL/FRLVL Flag */
  148. #define HAL_SPI_ERROR_UNKNOW (uint32_t)0x00000040 /*!< Unknow Error error */
  149. /**
  150. * @}
  151. */
  152. /** @defgroup SPI_Mode SPI Mode
  153. * @{
  154. */
  155. #define SPI_MODE_SLAVE ((uint32_t)0x00000000)
  156. #define SPI_MODE_MASTER (SPI_CR1_MSTR | SPI_CR1_SSI)
  157. /**
  158. * @}
  159. */
  160. /** @defgroup SPI_Direction SPI Direction Mode
  161. * @{
  162. */
  163. #define SPI_DIRECTION_2LINES ((uint32_t)0x00000000)
  164. #define SPI_DIRECTION_2LINES_RXONLY SPI_CR1_RXONLY
  165. #define SPI_DIRECTION_1LINE SPI_CR1_BIDIMODE
  166. /**
  167. * @}
  168. */
  169. /** @defgroup SPI_Data_Size SPI Data Size
  170. * @{
  171. */
  172. #define SPI_DATASIZE_4BIT ((uint32_t)0x0300)
  173. #define SPI_DATASIZE_5BIT ((uint32_t)0x0400)
  174. #define SPI_DATASIZE_6BIT ((uint32_t)0x0500)
  175. #define SPI_DATASIZE_7BIT ((uint32_t)0x0600)
  176. #define SPI_DATASIZE_8BIT ((uint32_t)0x0700)
  177. #define SPI_DATASIZE_9BIT ((uint32_t)0x0800)
  178. #define SPI_DATASIZE_10BIT ((uint32_t)0x0900)
  179. #define SPI_DATASIZE_11BIT ((uint32_t)0x0A00)
  180. #define SPI_DATASIZE_12BIT ((uint32_t)0x0B00)
  181. #define SPI_DATASIZE_13BIT ((uint32_t)0x0C00)
  182. #define SPI_DATASIZE_14BIT ((uint32_t)0x0D00)
  183. #define SPI_DATASIZE_15BIT ((uint32_t)0x0E00)
  184. #define SPI_DATASIZE_16BIT ((uint32_t)0x0F00)
  185. /**
  186. * @}
  187. */
  188. /** @defgroup SPI_Clock_Polarity SPI Clock Polarity
  189. * @{
  190. */
  191. #define SPI_POLARITY_LOW ((uint32_t)0x00000000)
  192. #define SPI_POLARITY_HIGH SPI_CR1_CPOL
  193. /**
  194. * @}
  195. */
  196. /** @defgroup SPI_Clock_Phase SPI Clock Phase
  197. * @{
  198. */
  199. #define SPI_PHASE_1EDGE ((uint32_t)0x00000000)
  200. #define SPI_PHASE_2EDGE SPI_CR1_CPHA
  201. /**
  202. * @}
  203. */
  204. /** @defgroup SPI_Slave_Select_management SPI Slave Select management
  205. * @{
  206. */
  207. #define SPI_NSS_SOFT SPI_CR1_SSM
  208. #define SPI_NSS_HARD_INPUT ((uint32_t)0x00000000)
  209. #define SPI_NSS_HARD_OUTPUT ((uint32_t)0x00040000)
  210. /**
  211. * @}
  212. */
  213. /** @defgroup SPI_NSSP_Mode SPI NSS Pulse Mode
  214. * @{
  215. */
  216. #define SPI_NSS_PULSE_ENABLE SPI_CR2_NSSP
  217. #define SPI_NSS_PULSE_DISABLE ((uint32_t)0x00000000)
  218. /**
  219. * @}
  220. */
  221. /** @defgroup SPI_BaudRate_Prescaler SPI BaudRate Prescaler
  222. * @{
  223. */
  224. #define SPI_BAUDRATEPRESCALER_2 ((uint32_t)0x00000000)
  225. #define SPI_BAUDRATEPRESCALER_4 ((uint32_t)0x00000008)
  226. #define SPI_BAUDRATEPRESCALER_8 ((uint32_t)0x00000010)
  227. #define SPI_BAUDRATEPRESCALER_16 ((uint32_t)0x00000018)
  228. #define SPI_BAUDRATEPRESCALER_32 ((uint32_t)0x00000020)
  229. #define SPI_BAUDRATEPRESCALER_64 ((uint32_t)0x00000028)
  230. #define SPI_BAUDRATEPRESCALER_128 ((uint32_t)0x00000030)
  231. #define SPI_BAUDRATEPRESCALER_256 ((uint32_t)0x00000038)
  232. /**
  233. * @}
  234. */
  235. /** @defgroup SPI_MSB_LSB_transmission SPI MSB LSB transmission
  236. * @{
  237. */
  238. #define SPI_FIRSTBIT_MSB ((uint32_t)0x00000000)
  239. #define SPI_FIRSTBIT_LSB SPI_CR1_LSBFIRST
  240. /**
  241. * @}
  242. */
  243. /** @defgroup SPI_TI_mode SPI TI mode
  244. * @{
  245. */
  246. #define SPI_TIMODE_DISABLE ((uint32_t)0x00000000)
  247. #define SPI_TIMODE_ENABLE SPI_CR2_FRF
  248. /**
  249. * @}
  250. */
  251. /** @defgroup SPI_CRC_Calculation SPI CRC Calculation
  252. * @{
  253. */
  254. #define SPI_CRCCALCULATION_DISABLE ((uint32_t)0x00000000)
  255. #define SPI_CRCCALCULATION_ENABLE SPI_CR1_CRCEN
  256. /**
  257. * @}
  258. */
  259. /** @defgroup SPI_CRC_length SPI CRC Length
  260. * @{
  261. * This parameter can be one of the following values:
  262. * SPI_CRC_LENGTH_DATASIZE: aligned with the data size
  263. * SPI_CRC_LENGTH_8BIT : CRC 8bit
  264. * SPI_CRC_LENGTH_16BIT : CRC 16bit
  265. */
  266. #define SPI_CRC_LENGTH_DATASIZE ((uint32_t)0x00000000)
  267. #define SPI_CRC_LENGTH_8BIT ((uint32_t)0x00000001)
  268. #define SPI_CRC_LENGTH_16BIT ((uint32_t)0x00000002)
  269. /**
  270. * @}
  271. */
  272. /** @defgroup SPI_FIFO_reception_threshold SPI FIFO Reception Threshold
  273. * @{
  274. * This parameter can be one of the following values:
  275. * SPI_RXFIFO_THRESHOLD or SPI_RXFIFO_THRESHOLD_QF :
  276. * RXNE event is generated if the FIFO
  277. * level is greater or equal to 1/2(16-bits).
  278. * SPI_RXFIFO_THRESHOLD_HF: RXNE event is generated if the FIFO
  279. * level is greater or equal to 1/4(8 bits). */
  280. #define SPI_RXFIFO_THRESHOLD SPI_CR2_FRXTH
  281. #define SPI_RXFIFO_THRESHOLD_QF SPI_CR2_FRXTH
  282. #define SPI_RXFIFO_THRESHOLD_HF ((uint32_t)0x00000000)
  283. /**
  284. * @}
  285. */
  286. /** @defgroup SPI_Interrupt_configuration_definition SPI Interrupt configuration definition
  287. * @brief SPI Interrupt definition
  288. * Elements values convention: 0xXXXXXXXX
  289. * - XXXXXXXX : Interrupt control mask
  290. * @{
  291. */
  292. #define SPI_IT_TXE SPI_CR2_TXEIE
  293. #define SPI_IT_RXNE SPI_CR2_RXNEIE
  294. #define SPI_IT_ERR SPI_CR2_ERRIE
  295. /**
  296. * @}
  297. */
  298. /** @defgroup SPI_Flag_definition SPI Flag definition
  299. * @brief Flag definition
  300. * Elements values convention: 0xXXXXYYYY
  301. * - XXXX : Flag register Index
  302. * - YYYY : Flag mask
  303. * @{
  304. */
  305. #define SPI_FLAG_RXNE SPI_SR_RXNE /* SPI status flag: Rx buffer not empty flag */
  306. #define SPI_FLAG_TXE SPI_SR_TXE /* SPI status flag: Tx buffer empty flag */
  307. #define SPI_FLAG_BSY SPI_SR_BSY /* SPI status flag: Busy flag */
  308. #define SPI_FLAG_CRCERR SPI_SR_CRCERR /* SPI Error flag: CRC error flag */
  309. #define SPI_FLAG_MODF SPI_SR_MODF /* SPI Error flag: Mode fault flag */
  310. #define SPI_FLAG_OVR SPI_SR_OVR /* SPI Error flag: Overrun flag */
  311. #define SPI_FLAG_FRE SPI_SR_FRE /* SPI Error flag: TI mode frame format error flag */
  312. #define SPI_FLAG_FTLVL SPI_SR_FTLVL /* SPI fifo transmission level */
  313. #define SPI_FLAG_FRLVL SPI_SR_FRLVL /* SPI fifo reception level */
  314. /**
  315. * @}
  316. */
  317. /** @defgroup SPI_transmission_fifo_status_level SPI Transmission FIFO Status Level
  318. * @{
  319. */
  320. #define SPI_FTLVL_EMPTY ((uint32_t)0x0000)
  321. #define SPI_FTLVL_QUARTER_FULL ((uint32_t)0x0800)
  322. #define SPI_FTLVL_HALF_FULL ((uint32_t)0x1000)
  323. #define SPI_FTLVL_FULL ((uint32_t)0x1800)
  324. /**
  325. * @}
  326. */
  327. /** @defgroup SPI_reception_fifo_status_level SPI Reception FIFO Status Level
  328. * @{
  329. */
  330. #define SPI_FRLVL_EMPTY ((uint32_t)0x0000)
  331. #define SPI_FRLVL_QUARTER_FULL ((uint32_t)0x0200)
  332. #define SPI_FRLVL_HALF_FULL ((uint32_t)0x0400)
  333. #define SPI_FRLVL_FULL ((uint32_t)0x0600)
  334. /**
  335. * @}
  336. */
  337. /**
  338. * @}
  339. */
  340. /* Exported macros ------------------------------------------------------------*/
  341. /** @defgroup SPI_Exported_Macros SPI Exported Macros
  342. * @{
  343. */
  344. /** @brief Reset SPI handle state
  345. * @param __HANDLE__: SPI handle.
  346. * @retval None
  347. */
  348. #define __HAL_SPI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SPI_STATE_RESET)
  349. /** @brief Enables or disables the specified SPI interrupts.
  350. * @param __HANDLE__ : specifies the SPI Handle.
  351. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  352. * @param __INTERRUPT__ : specifies the interrupt source to enable or disable.
  353. * This parameter can be one of the following values:
  354. * @arg SPI_IT_TXE: Tx buffer empty interrupt enable
  355. * @arg SPI_IT_RXNE: RX buffer not empty interrupt enable
  356. * @arg SPI_IT_ERR: Error interrupt enable
  357. * @retval None
  358. */
  359. #define __HAL_SPI_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR2 |= (__INTERRUPT__))
  360. #define __HAL_SPI_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR2 &= (~(__INTERRUPT__)))
  361. /** @brief Checks if the specified SPI interrupt source is enabled or disabled.
  362. * @param __HANDLE__ : specifies the SPI Handle.
  363. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  364. * @param __INTERRUPT__ : specifies the SPI interrupt source to check.
  365. * This parameter can be one of the following values:
  366. * @arg SPI_IT_TXE: Tx buffer empty interrupt enable
  367. * @arg SPI_IT_RXNE: RX buffer not empty interrupt enable
  368. * @arg SPI_IT_ERR: Error interrupt enable
  369. * @retval The new state of __IT__ (TRUE or FALSE).
  370. */
  371. #define __HAL_SPI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR2 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
  372. /** @brief Checks whether the specified SPI flag is set or not.
  373. * @param __HANDLE__ : specifies the SPI Handle.
  374. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  375. * @param __FLAG__ : specifies the flag to check.
  376. * This parameter can be one of the following values:
  377. * @arg SPI_FLAG_RXNE: Receive buffer not empty flag
  378. * @arg SPI_FLAG_TXE: Transmit buffer empty flag
  379. * @arg SPI_FLAG_CRCERR: CRC error flag
  380. * @arg SPI_FLAG_MODF: Mode fault flag
  381. * @arg SPI_FLAG_OVR: Overrun flag
  382. * @arg SPI_FLAG_BSY: Busy flag
  383. * @arg SPI_FLAG_FRE: Frame format error flag
  384. * @arg SPI_FLAG_FTLVL: SPI fifo transmission level
  385. * @arg SPI_FLAG_FRLVL: SPI fifo reception level
  386. * @retval The new state of __FLAG__ (TRUE or FALSE).
  387. */
  388. #define __HAL_SPI_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))
  389. /** @brief Clears the SPI CRCERR pending flag.
  390. * @param __HANDLE__ : specifies the SPI Handle.
  391. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  392. * @retval None
  393. */
  394. #define __HAL_SPI_CLEAR_CRCERRFLAG(__HANDLE__) ((__HANDLE__)->Instance->SR = (uint16_t)(~SPI_FLAG_CRCERR))
  395. /** @brief Clears the SPI MODF pending flag.
  396. * @param __HANDLE__ : specifies the SPI Handle.
  397. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  398. *
  399. * @retval None
  400. */
  401. #define __HAL_SPI_CLEAR_MODFFLAG(__HANDLE__) \
  402. do{ \
  403. __IO uint32_t tmpreg; \
  404. tmpreg = (__HANDLE__)->Instance->SR; \
  405. (__HANDLE__)->Instance->CR1 &= (~SPI_CR1_SPE); \
  406. UNUSED(tmpreg); \
  407. } while(0)
  408. /** @brief Clears the SPI OVR pending flag.
  409. * @param __HANDLE__ : specifies the SPI Handle.
  410. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  411. *
  412. * @retval None
  413. */
  414. #define __HAL_SPI_CLEAR_OVRFLAG(__HANDLE__) \
  415. do{ \
  416. __IO uint32_t tmpreg; \
  417. tmpreg = (__HANDLE__)->Instance->DR; \
  418. tmpreg = (__HANDLE__)->Instance->SR; \
  419. UNUSED(tmpreg); \
  420. } while(0)
  421. /** @brief Clears the SPI FRE pending flag.
  422. * @param __HANDLE__ : specifies the SPI Handle.
  423. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  424. *
  425. * @retval None
  426. */
  427. #define __HAL_SPI_CLEAR_FREFLAG(__HANDLE__) \
  428. do{ \
  429. __IO uint32_t tmpreg; \
  430. tmpreg = (__HANDLE__)->Instance->SR; \
  431. UNUSED(tmpreg); \
  432. } while(0)
  433. /** @brief Enables the SPI.
  434. * @param __HANDLE__ : specifies the SPI Handle.
  435. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  436. * @retval None
  437. */
  438. #define __HAL_SPI_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= SPI_CR1_SPE)
  439. /** @brief Disables the SPI.
  440. * @param __HANDLE__ : specifies the SPI Handle.
  441. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  442. * @retval None
  443. */
  444. #define __HAL_SPI_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= (~SPI_CR1_SPE))
  445. /**
  446. * @}
  447. */
  448. /* Private macros --------------------------------------------------------*/
  449. /** @defgroup SPI_Private_Macros SPI Private Macros
  450. * @{
  451. */
  452. /** @brief Sets the SPI transmit-only mode.
  453. * @param __HANDLE__ : specifies the SPI Handle.
  454. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  455. * @retval None
  456. */
  457. #define SPI_1LINE_TX(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= SPI_CR1_BIDIOE)
  458. /** @brief Sets the SPI receive-only mode.
  459. * @param __HANDLE__ : specifies the SPI Handle.
  460. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  461. * @retval None
  462. */
  463. #define SPI_1LINE_RX(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= (~SPI_CR1_BIDIOE))
  464. /** @brief Resets the CRC calculation of the SPI.
  465. * @param __HANDLE__ : specifies the SPI Handle.
  466. * This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  467. * @retval None
  468. */
  469. #define SPI_RESET_CRC(__HANDLE__) do{(__HANDLE__)->Instance->CR1 &= (uint16_t)(~SPI_CR1_CRCEN);\
  470. (__HANDLE__)->Instance->CR1 |= SPI_CR1_CRCEN;}while(0)
  471. #define IS_SPI_MODE(MODE) (((MODE) == SPI_MODE_SLAVE) || \
  472. ((MODE) == SPI_MODE_MASTER))
  473. #define IS_SPI_DIRECTION(MODE) (((MODE) == SPI_DIRECTION_2LINES) || \
  474. ((MODE) == SPI_DIRECTION_2LINES_RXONLY) ||\
  475. ((MODE) == SPI_DIRECTION_1LINE))
  476. #define IS_SPI_DIRECTION_2LINES(MODE) ((MODE) == SPI_DIRECTION_2LINES)
  477. #define IS_SPI_DIRECTION_2LINES_OR_1LINE(MODE) (((MODE) == SPI_DIRECTION_2LINES)|| \
  478. ((MODE) == SPI_DIRECTION_1LINE))
  479. #define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DATASIZE_16BIT) || \
  480. ((DATASIZE) == SPI_DATASIZE_15BIT) || \
  481. ((DATASIZE) == SPI_DATASIZE_14BIT) || \
  482. ((DATASIZE) == SPI_DATASIZE_13BIT) || \
  483. ((DATASIZE) == SPI_DATASIZE_12BIT) || \
  484. ((DATASIZE) == SPI_DATASIZE_11BIT) || \
  485. ((DATASIZE) == SPI_DATASIZE_10BIT) || \
  486. ((DATASIZE) == SPI_DATASIZE_9BIT) || \
  487. ((DATASIZE) == SPI_DATASIZE_8BIT) || \
  488. ((DATASIZE) == SPI_DATASIZE_7BIT) || \
  489. ((DATASIZE) == SPI_DATASIZE_6BIT) || \
  490. ((DATASIZE) == SPI_DATASIZE_5BIT) || \
  491. ((DATASIZE) == SPI_DATASIZE_4BIT))
  492. #define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_POLARITY_LOW) || \
  493. ((CPOL) == SPI_POLARITY_HIGH))
  494. #define IS_SPI_CPHA(CPHA) (((CPHA) == SPI_PHASE_1EDGE) || \
  495. ((CPHA) == SPI_PHASE_2EDGE))
  496. #define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_SOFT) || \
  497. ((NSS) == SPI_NSS_HARD_INPUT) || \
  498. ((NSS) == SPI_NSS_HARD_OUTPUT))
  499. #define IS_SPI_NSSP(NSSP) (((NSSP) == SPI_NSS_PULSE_ENABLE) || \
  500. ((NSSP) == SPI_NSS_PULSE_DISABLE))
  501. #define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BAUDRATEPRESCALER_2) || \
  502. ((PRESCALER) == SPI_BAUDRATEPRESCALER_4) || \
  503. ((PRESCALER) == SPI_BAUDRATEPRESCALER_8) || \
  504. ((PRESCALER) == SPI_BAUDRATEPRESCALER_16) || \
  505. ((PRESCALER) == SPI_BAUDRATEPRESCALER_32) || \
  506. ((PRESCALER) == SPI_BAUDRATEPRESCALER_64) || \
  507. ((PRESCALER) == SPI_BAUDRATEPRESCALER_128) || \
  508. ((PRESCALER) == SPI_BAUDRATEPRESCALER_256))
  509. #define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FIRSTBIT_MSB) || \
  510. ((BIT) == SPI_FIRSTBIT_LSB))
  511. #define IS_SPI_TIMODE(MODE) (((MODE) == SPI_TIMODE_DISABLE) || \
  512. ((MODE) == SPI_TIMODE_ENABLE))
  513. #define IS_SPI_CRC_CALCULATION(CALCULATION) (((CALCULATION) == SPI_CRCCALCULATION_DISABLE) || \
  514. ((CALCULATION) == SPI_CRCCALCULATION_ENABLE))
  515. #define IS_SPI_CRC_LENGTH(LENGTH) (((LENGTH) == SPI_CRC_LENGTH_DATASIZE) ||\
  516. ((LENGTH) == SPI_CRC_LENGTH_8BIT) || \
  517. ((LENGTH) == SPI_CRC_LENGTH_16BIT))
  518. #define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL) (((POLYNOMIAL) >= 0x1) && ((POLYNOMIAL) <= 0xFFFF))
  519. /**
  520. * @}
  521. */
  522. /* Exported functions --------------------------------------------------------*/
  523. /** @addtogroup SPI_Exported_Functions SPI Exported Functions
  524. * @{
  525. */
  526. /** @addtogroup SPI_Exported_Functions_Group1 Initialization and de-initialization functions
  527. * @{
  528. */
  529. /* Initialization and de-initialization functions ****************************/
  530. HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi);
  531. HAL_StatusTypeDef HAL_SPI_DeInit (SPI_HandleTypeDef *hspi);
  532. void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi);
  533. void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi);
  534. /**
  535. * @}
  536. */
  537. /** @addtogroup SPI_Exported_Functions_Group2 IO operation functions
  538. * @{
  539. */
  540. /* IO operation functions *****************************************************/
  541. HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
  542. HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
  543. HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
  544. HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
  545. HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
  546. HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
  547. HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
  548. HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
  549. HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
  550. HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi);
  551. HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi);
  552. HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi);
  553. void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi);
  554. void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi);
  555. void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi);
  556. void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi);
  557. void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi);
  558. void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi);
  559. void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi);
  560. void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi);
  561. /**
  562. * @}
  563. */
  564. /** @addtogroup SPI_Exported_Functions_Group3 Peripheral State and Errors functions
  565. * @{
  566. */
  567. /* Peripheral State and Error functions ***************************************/
  568. HAL_SPI_StateTypeDef HAL_SPI_GetState(SPI_HandleTypeDef *hspi);
  569. uint32_t HAL_SPI_GetError(SPI_HandleTypeDef *hspi);
  570. /**
  571. * @}
  572. */
  573. /**
  574. * @}
  575. */
  576. /**
  577. * @}
  578. */
  579. /**
  580. * @}
  581. */
  582. #ifdef __cplusplus
  583. }
  584. #endif
  585. #endif /* __STM32F7xx_HAL_SPI_H */
  586. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/