Subversion Repositories DashDisplay

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /**
  2.   ******************************************************************************
  3.   * @file    stm32f1xx_hal_spi.h
  4.   * @author  MCD Application Team
  5.   * @version V1.0.1
  6.   * @date    31-July-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.  
  38. /* Define to prevent recursive inclusion -------------------------------------*/
  39. #ifndef __STM32F1xx_HAL_SPI_H
  40. #define __STM32F1xx_HAL_SPI_H
  41.  
  42. #ifdef __cplusplus
  43.  extern "C" {
  44. #endif
  45.  
  46. /* Includes ------------------------------------------------------------------*/
  47. #include "stm32f1xx_hal_def.h"  
  48.  
  49. /** @addtogroup STM32F1xx_HAL_Driver
  50.   * @{
  51.   */
  52.  
  53. /** @addtogroup SPI
  54.   * @{
  55.   */
  56.  
  57. /* Exported types ------------------------------------------------------------*/
  58. /** @defgroup SPI_Exported_Types SPI Exported Types
  59.   * @{
  60.   */
  61.  
  62. /**
  63.   * @brief  SPI Configuration Structure definition  
  64.   */
  65. typedef struct
  66. {
  67.   uint32_t Mode;               /*!< Specifies the SPI operating mode.
  68.                                     This parameter can be a value of @ref SPI_mode */
  69.  
  70.   uint32_t Direction;          /*!< Specifies the SPI Directional mode state.
  71.                                     This parameter can be a value of @ref SPI_Direction_mode */
  72.  
  73.   uint32_t DataSize;           /*!< Specifies the SPI data size.
  74.                                     This parameter can be a value of @ref SPI_data_size */
  75.  
  76.   uint32_t CLKPolarity;        /*!< Specifies the serial clock steady state.
  77.                                     This parameter can be a value of @ref SPI_Clock_Polarity */
  78.  
  79.   uint32_t CLKPhase;           /*!< Specifies the clock active edge for the bit capture.
  80.                                     This parameter can be a value of @ref SPI_Clock_Phase */
  81.  
  82.   uint32_t NSS;                /*!< Specifies whether the NSS signal is managed by
  83.                                     hardware (NSS pin) or by software using the SSI bit.
  84.                                     This parameter can be a value of @ref SPI_Slave_Select_management */
  85.  
  86.   uint32_t BaudRatePrescaler;  /*!< Specifies the Baud Rate prescaler value which will be
  87.                                     used to configure the transmit and receive SCK clock.
  88.                                     This parameter can be a value of @ref SPI_BaudRate_Prescaler
  89.                                     @note The communication clock is derived from the master
  90.                                     clock. The slave clock does not need to be set */
  91.  
  92.   uint32_t FirstBit;           /*!< Specifies whether data transfers start from MSB or LSB bit.
  93.                                     This parameter can be a value of @ref SPI_MSB_LSB_transmission */
  94.  
  95.   uint32_t TIMode;             /*!< Specifies if the TI mode is enabled or not.
  96.                                     This parameter can be a value of @ref SPI_TI_mode */
  97.  
  98.   uint32_t CRCCalculation;     /*!< Specifies if the CRC calculation is enabled or not.
  99.                                     This parameter can be a value of @ref SPI_CRC_Calculation */
  100.  
  101.   uint32_t CRCPolynomial;      /*!< Specifies the polynomial used for the CRC calculation.
  102.                                     This parameter must be a number between Min_Data = 0 and Max_Data = 65535 */
  103.  
  104. }SPI_InitTypeDef;
  105.  
  106. /**
  107.   * @brief  HAL SPI State structure definition
  108.   */
  109. typedef enum
  110. {
  111.   HAL_SPI_STATE_RESET      = 0x00,  /*!< SPI not yet initialized or disabled                */
  112.   HAL_SPI_STATE_READY      = 0x01,  /*!< SPI initialized and ready for use                  */
  113.   HAL_SPI_STATE_BUSY       = 0x02,  /*!< SPI process is ongoing                             */
  114.   HAL_SPI_STATE_BUSY_TX    = 0x12,  /*!< Data Transmission process is ongoing               */
  115.   HAL_SPI_STATE_BUSY_RX    = 0x22,  /*!< Data Reception process is ongoing                  */
  116.   HAL_SPI_STATE_BUSY_TX_RX = 0x32,  /*!< Data Transmission and Reception process is ongoing */
  117.   HAL_SPI_STATE_ERROR      = 0x03   /*!< SPI error state                                    */
  118.    
  119. }HAL_SPI_StateTypeDef;
  120.  
  121.  
  122. /**
  123.   * @brief  SPI handle Structure definition
  124.   */
  125. typedef struct __SPI_HandleTypeDef
  126. {
  127.   SPI_TypeDef                *Instance;    /*!< SPI registers base address */
  128.  
  129.   SPI_InitTypeDef            Init;         /*!< SPI communication parameters */
  130.  
  131.   uint8_t                    *pTxBuffPtr;  /*!< Pointer to SPI Tx transfer Buffer */
  132.  
  133.   uint16_t                   TxXferSize;   /*!< SPI Tx transfer size */
  134.  
  135.   uint16_t                   TxXferCount;  /*!< SPI Tx Transfer Counter */
  136.  
  137.   uint8_t                    *pRxBuffPtr;  /*!< Pointer to SPI Rx transfer Buffer */
  138.  
  139.   uint16_t                   RxXferSize;   /*!< SPI Rx transfer size */
  140.  
  141.   uint16_t                   RxXferCount;  /*!< SPI Rx Transfer Counter */
  142.  
  143.   DMA_HandleTypeDef          *hdmatx;      /*!< SPI Tx DMA handle parameters */
  144.  
  145.   DMA_HandleTypeDef          *hdmarx;      /*!< SPI Rx DMA handle parameters */
  146.  
  147.   void                       (*RxISR)(struct __SPI_HandleTypeDef * hspi); /*!< function pointer on Rx ISR */
  148.  
  149.   void                       (*TxISR)(struct __SPI_HandleTypeDef * hspi); /*!< function pointer on Tx ISR */
  150.  
  151.   HAL_LockTypeDef            Lock;         /*!< SPI locking object */
  152.  
  153.   __IO HAL_SPI_StateTypeDef  State;        /*!< SPI communication state */
  154.  
  155.   __IO uint32_t  ErrorCode;    /*!< SPI Error code */
  156.  
  157. }SPI_HandleTypeDef;
  158. /**
  159.   * @}
  160.   */
  161.  
  162.  
  163. /* Exported constants --------------------------------------------------------*/
  164.  
  165. /** @defgroup SPI_Exported_Constants SPI Exported Constants
  166.   * @{
  167.   */
  168.  
  169. /** @defgroup SPI_Error_Codes SPI Error Codes
  170.   * @{
  171.   */
  172. #define HAL_SPI_ERROR_NONE      ((uint32_t)0x00)    /*!< No error             */
  173. #define HAL_SPI_ERROR_MODF      ((uint32_t)0x01)    /*!< MODF error           */
  174. #define HAL_SPI_ERROR_CRC       ((uint32_t)0x02)    /*!< CRC error            */
  175. #define HAL_SPI_ERROR_OVR       ((uint32_t)0x04)    /*!< OVR error            */
  176. #define HAL_SPI_ERROR_DMA       ((uint32_t)0x08)    /*!< DMA transfer error   */
  177. #define HAL_SPI_ERROR_FLAG      ((uint32_t)0x10)    /*!< Flag: RXNE,TXE, BSY  */
  178. /**
  179.   * @}
  180.   */
  181.  
  182.  
  183.  
  184.  
  185. /** @defgroup SPI_mode SPI mode
  186.   * @{
  187.   */
  188. #define SPI_MODE_SLAVE                  ((uint32_t)0x00000000)
  189. #define SPI_MODE_MASTER                 (SPI_CR1_MSTR | SPI_CR1_SSI)
  190.  
  191. /**
  192.   * @}
  193.   */
  194.  
  195. /** @defgroup SPI_Direction_mode SPI Direction mode
  196.   * @{
  197.   */
  198. #define SPI_DIRECTION_2LINES            ((uint32_t)0x00000000)
  199. #define SPI_DIRECTION_2LINES_RXONLY     SPI_CR1_RXONLY
  200. #define SPI_DIRECTION_1LINE             SPI_CR1_BIDIMODE
  201.  
  202. /**
  203.   * @}
  204.   */
  205.  
  206. /** @defgroup SPI_data_size SPI data size
  207.   * @{
  208.   */
  209. #define SPI_DATASIZE_8BIT               ((uint32_t)0x00000000)
  210. #define SPI_DATASIZE_16BIT              SPI_CR1_DFF
  211.  
  212. /**
  213.   * @}
  214.   */
  215.  
  216. /** @defgroup SPI_Clock_Polarity SPI Clock Polarity
  217.   * @{
  218.   */
  219. #define SPI_POLARITY_LOW                ((uint32_t)0x00000000)
  220. #define SPI_POLARITY_HIGH               SPI_CR1_CPOL
  221.  
  222. /**
  223.   * @}
  224.   */
  225.  
  226. /** @defgroup SPI_Clock_Phase SPI Clock Phase
  227.   * @{
  228.   */
  229. #define SPI_PHASE_1EDGE                 ((uint32_t)0x00000000)
  230. #define SPI_PHASE_2EDGE                 SPI_CR1_CPHA
  231.  
  232. /**
  233.   * @}
  234.   */
  235.  
  236. /** @defgroup SPI_Slave_Select_management SPI Slave Select management
  237.   * @{
  238.   */
  239. #define SPI_NSS_SOFT                    SPI_CR1_SSM
  240. #define SPI_NSS_HARD_INPUT              ((uint32_t)0x00000000)
  241. #define SPI_NSS_HARD_OUTPUT             ((uint32_t)(SPI_CR2_SSOE << 16))
  242.  
  243. /**
  244.   * @}
  245.   */
  246.  
  247. /** @defgroup SPI_BaudRate_Prescaler SPI BaudRate Prescaler
  248.   * @{
  249.   */
  250. #define SPI_BAUDRATEPRESCALER_2         ((uint32_t)0x00000000)
  251. #define SPI_BAUDRATEPRESCALER_4         ((uint32_t)SPI_CR1_BR_0)
  252. #define SPI_BAUDRATEPRESCALER_8         ((uint32_t)SPI_CR1_BR_1)
  253. #define SPI_BAUDRATEPRESCALER_16        ((uint32_t)SPI_CR1_BR_1 | SPI_CR1_BR_0)
  254. #define SPI_BAUDRATEPRESCALER_32        ((uint32_t)SPI_CR1_BR_2)
  255. #define SPI_BAUDRATEPRESCALER_64        ((uint32_t)SPI_CR1_BR_2 | SPI_CR1_BR_0)
  256. #define SPI_BAUDRATEPRESCALER_128       ((uint32_t)SPI_CR1_BR_2 | SPI_CR1_BR_1)
  257. #define SPI_BAUDRATEPRESCALER_256       ((uint32_t)SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0)
  258.  
  259. /**
  260.   * @}
  261.   */
  262.  
  263. /** @defgroup SPI_MSB_LSB_transmission SPI MSB LSB transmission
  264.   * @{
  265.   */
  266. #define SPI_FIRSTBIT_MSB                ((uint32_t)0x00000000)
  267. #define SPI_FIRSTBIT_LSB                SPI_CR1_LSBFIRST
  268.  
  269. /**
  270.   * @}
  271.   */
  272.  
  273. /** @defgroup SPI_TI_mode SPI TI mode disable
  274.   * @brief  SPI TI Mode not supported for STM32F1xx family
  275.   * @{
  276.   */
  277. #define SPI_TIMODE_DISABLE             ((uint32_t)0x00000000)
  278.  
  279. /**
  280.   * @}
  281.   */
  282.  
  283. /** @defgroup SPI_CRC_Calculation SPI CRC Calculation
  284.   * @{
  285.   */
  286. #define SPI_CRCCALCULATION_DISABLE      ((uint32_t)0x00000000)
  287. #define SPI_CRCCALCULATION_ENABLE       SPI_CR1_CRCEN
  288.  
  289. /**
  290.   * @}
  291.   */
  292.  
  293. /** @defgroup SPI_Interrupt_configuration_definition SPI Interrupt configuration definition
  294.   * @{
  295.   */
  296. #define SPI_IT_TXE                      SPI_CR2_TXEIE
  297. #define SPI_IT_RXNE                     SPI_CR2_RXNEIE
  298. #define SPI_IT_ERR                      SPI_CR2_ERRIE
  299. /**
  300.   * @}
  301.   */
  302.  
  303. /** @defgroup SPI_Flag_definition SPI Flag definition
  304.   * @{
  305.   */
  306. #define SPI_FLAG_RXNE                   SPI_SR_RXNE
  307. #define SPI_FLAG_TXE                    SPI_SR_TXE
  308. #define SPI_FLAG_CRCERR                 SPI_SR_CRCERR
  309. #define SPI_FLAG_MODF                   SPI_SR_MODF
  310. #define SPI_FLAG_OVR                    SPI_SR_OVR
  311. #define SPI_FLAG_BSY                    SPI_SR_BSY
  312.  
  313. /**
  314.   * @}
  315.   */
  316.  
  317. /**
  318.   * @}
  319.   */
  320.  
  321.  
  322. /* Private constants ---------------------------------------------------------*/
  323. /** @defgroup SPI_Private_Constants SPI Private Constants
  324.   * @{
  325.   */
  326. #define SPI_INVALID_CRC_ERROR     0          /* CRC error wrongly detected */
  327. #define SPI_VALID_CRC_ERROR       1          /* CRC error is true */
  328. /**
  329.   * @}
  330.   */
  331.  
  332.  
  333. /* Exported macro ------------------------------------------------------------*/
  334. /** @defgroup SPI_Exported_Macros SPI Exported Macros
  335.   * @{
  336.   */
  337.  
  338. /** @brief Reset SPI handle state
  339.   * @param  __HANDLE__: specifies the SPI handle.
  340.   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  341.   * @retval None
  342.   */
  343. #define __HAL_SPI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SPI_STATE_RESET)
  344.  
  345. /** @brief  Enable the specified SPI interrupts.
  346.   * @param  __HANDLE__: specifies the SPI handle.
  347.   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  348.   * @param  __INTERRUPT__: specifies the interrupt source to enable.
  349.   *         This parameter can be one of the following values:
  350.   *            @arg SPI_IT_TXE: Tx buffer empty interrupt enable
  351.   *            @arg SPI_IT_RXNE: RX buffer not empty interrupt enable
  352.   *            @arg SPI_IT_ERR: Error interrupt enable
  353.   * @retval None
  354.   */
  355. #define __HAL_SPI_ENABLE_IT(__HANDLE__, __INTERRUPT__)   SET_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__))
  356.  
  357. /** @brief  Disable the specified SPI interrupts.
  358.   * @param  __HANDLE__: specifies the SPI handle.
  359.   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  360.   * @param  __INTERRUPT__: specifies the interrupt source to disable.
  361.   *         This parameter can be one of the following values:
  362.   *            @arg SPI_IT_TXE: Tx buffer empty interrupt enable
  363.   *            @arg SPI_IT_RXNE: RX buffer not empty interrupt enable
  364.   *            @arg SPI_IT_ERR: Error interrupt enable
  365.   * @retval None
  366.   */
  367. #define __HAL_SPI_DISABLE_IT(__HANDLE__, __INTERRUPT__)  CLEAR_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__))
  368.  
  369. /** @brief  Check if the specified SPI interrupt source is enabled or disabled.
  370.   * @param  __HANDLE__: specifies the SPI handle.
  371.   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  372.   * @param  __INTERRUPT__: specifies the SPI interrupt source to check.
  373.   *          This parameter can be one of the following values:
  374.   *             @arg SPI_IT_TXE: Tx buffer empty interrupt enable
  375.   *             @arg SPI_IT_RXNE: RX buffer not empty interrupt enable
  376.   *             @arg SPI_IT_ERR: Error interrupt enable
  377.   * @retval The new state of __IT__ (TRUE or FALSE).
  378.   */
  379. #define __HAL_SPI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR2 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
  380.  
  381. /** @brief  Check whether the specified SPI flag is set or not.
  382.   * @param  __HANDLE__: specifies the SPI handle.
  383.   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  384.   * @param  __FLAG__: specifies the flag to check.
  385.   *         This parameter can be one of the following values:
  386.   *            @arg SPI_FLAG_RXNE: Receive buffer not empty flag
  387.   *            @arg SPI_FLAG_TXE: Transmit buffer empty flag
  388.   *            @arg SPI_FLAG_CRCERR: CRC error flag
  389.   *            @arg SPI_FLAG_MODF: Mode fault flag
  390.   *            @arg SPI_FLAG_OVR: Overrun flag
  391.   *            @arg SPI_FLAG_BSY: Busy flag
  392.   * @retval The new state of __FLAG__ (TRUE or FALSE).
  393.   */
  394. #define __HAL_SPI_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))
  395.  
  396. /** @brief  Clear the SPI CRCERR pending flag.
  397.   * @param  __HANDLE__: specifies the SPI handle.
  398.   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  399.   * @retval None
  400.   */
  401. #define __HAL_SPI_CLEAR_CRCERRFLAG(__HANDLE__) ((__HANDLE__)->Instance->SR = ~(SPI_FLAG_CRCERR))
  402.  
  403. /** @brief  Clear the SPI MODF pending flag.
  404.   * @param  __HANDLE__: specifies the SPI handle.
  405.   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  406.   * @retval None
  407.   */
  408. #define __HAL_SPI_CLEAR_MODFFLAG(__HANDLE__)                      \
  409. do{                                                               \
  410.     __IO uint32_t tmpreg;                                         \
  411.     tmpreg = (__HANDLE__)->Instance->SR;                          \
  412.     tmpreg = CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE); \
  413.     UNUSED(tmpreg);                                               \
  414. }while(0)
  415.  
  416. /** @brief  Clear the SPI OVR pending flag.
  417.   * @param  __HANDLE__: specifies the SPI handle.
  418.   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  419.   * @retval None
  420.   */
  421. #define __HAL_SPI_CLEAR_OVRFLAG(__HANDLE__)                \
  422. do{                                                        \
  423.     __IO uint32_t tmpreg;                                  \
  424.     tmpreg = (__HANDLE__)->Instance->DR;                   \
  425.     tmpreg = (__HANDLE__)->Instance->SR;                   \
  426.     UNUSED(tmpreg);                                        \
  427. }while(0)  
  428.  
  429.  
  430. /** @brief  Enables the SPI.
  431.   * @param  __HANDLE__: specifies the SPI Handle.
  432.   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  433.   * @retval None
  434.   */                                                
  435. #define __HAL_SPI_ENABLE(__HANDLE__)  SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE)
  436.                                                  
  437. /** @brief  Disables the SPI.
  438.   * @param  __HANDLE__: specifies the SPI Handle.
  439.   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  440.   * @retval None
  441.   */                                          
  442. #define __HAL_SPI_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE)
  443.  
  444. /**
  445.   * @}
  446.   */
  447.  
  448.  
  449. /* Private macros -----------------------------------------------------------*/
  450. /** @defgroup SPI_Private_Macros SPI Private Macros
  451.   * @{
  452.   */
  453.  
  454. /** @brief  Checks if SPI Mode parameter is in allowed range.
  455.   * @param  __MODE__: specifies the SPI Mode.
  456.   *         This parameter can be a value of @ref SPI_mode
  457.   * @retval None
  458.   */
  459. #define IS_SPI_MODE(__MODE__) (((__MODE__) == SPI_MODE_SLAVE) || ((__MODE__) == SPI_MODE_MASTER))
  460.  
  461. /** @brief  Checks if SPI Direction Mode parameter is in allowed range.
  462.   * @param  __MODE__: specifies the SPI Direction Mode.
  463.   *         This parameter can be a value of @ref SPI_Direction_mode
  464.   * @retval None
  465.   */
  466. #define IS_SPI_DIRECTION_MODE(__MODE__) (((__MODE__) == SPI_DIRECTION_2LINES)        || \
  467.                                          ((__MODE__) == SPI_DIRECTION_2LINES_RXONLY) || \
  468.                                          ((__MODE__) == SPI_DIRECTION_1LINE))
  469.  
  470. /** @brief  Checks if SPI Direction Mode parameter is 1 or 2 lines.
  471.   * @param  __MODE__: specifies the SPI Direction Mode.
  472.   * @retval None
  473.   */
  474. #define IS_SPI_DIRECTION_2LINES_OR_1LINE(__MODE__) (((__MODE__) == SPI_DIRECTION_2LINES)  || \
  475.                                                     ((__MODE__) == SPI_DIRECTION_1LINE))
  476.  
  477. /** @brief  Checks if SPI Direction Mode parameter is 2 lines.
  478.   * @param  __MODE__: specifies the SPI Direction Mode.
  479.   * @retval None
  480.   */
  481. #define IS_SPI_DIRECTION_2LINES(__MODE__) ((__MODE__) == SPI_DIRECTION_2LINES)
  482.  
  483. /** @brief  Checks if SPI Data Size parameter is in allowed range.
  484.   * @param  __DATASIZE__: specifies the SPI Data Size.
  485.   *         This parameter can be a value of @ref SPI_data_size
  486.   * @retval None
  487.   */
  488. #define IS_SPI_DATASIZE(__DATASIZE__) (((__DATASIZE__) == SPI_DATASIZE_16BIT) || \
  489.                                        ((__DATASIZE__) == SPI_DATASIZE_8BIT))
  490.  
  491. /** @brief  Checks if SPI Serial clock steady state parameter is in allowed range.
  492.   * @param  __CPOL__: specifies the SPI serial clock steady state.
  493.   *         This parameter can be a value of @ref SPI_Clock_Polarity
  494.   * @retval None
  495.   */
  496. #define IS_SPI_CPOL(__CPOL__) (((__CPOL__) == SPI_POLARITY_LOW) || \
  497.                                ((__CPOL__) == SPI_POLARITY_HIGH))
  498.  
  499. /** @brief  Checks if SPI Clock Phase parameter is in allowed range.
  500.   * @param  __CPHA__: specifies the SPI Clock Phase.
  501.   *         This parameter can be a value of @ref SPI_Clock_Phase
  502.   * @retval None
  503.   */
  504. #define IS_SPI_CPHA(__CPHA__) (((__CPHA__) == SPI_PHASE_1EDGE) || \
  505.                                ((__CPHA__) == SPI_PHASE_2EDGE))
  506.  
  507. /** @brief  Checks if SPI Slave select parameter is in allowed range.
  508.   * @param  __NSS__: specifies the SPI Slave Slelect management parameter.
  509.   *         This parameter can be a value of @ref SPI_Slave_Select_management
  510.   * @retval None
  511.   */
  512. #define IS_SPI_NSS(__NSS__) (((__NSS__) == SPI_NSS_SOFT)       || \
  513.                              ((__NSS__) == SPI_NSS_HARD_INPUT) || \
  514.                              ((__NSS__) == SPI_NSS_HARD_OUTPUT))
  515.  
  516. /** @brief  Checks if SPI Baudrate prescaler parameter is in allowed range.
  517.   * @param  __PRESCALER__: specifies the SPI Baudrate prescaler.
  518.   *         This parameter can be a value of @ref SPI_BaudRate_Prescaler
  519.   * @retval None
  520.   */
  521. #define IS_SPI_BAUDRATE_PRESCALER(__PRESCALER__) (((__PRESCALER__) == SPI_BAUDRATEPRESCALER_2)   || \
  522.                                                   ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_4)   || \
  523.                                                   ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_8)   || \
  524.                                                   ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_16)  || \
  525.                                                   ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_32)  || \
  526.                                                   ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_64)  || \
  527.                                                   ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_128) || \
  528.                                                   ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_256))
  529.  
  530. /** @brief  Checks if SPI MSB LSB transmission parameter is in allowed range.
  531.   * @param  __BIT__: specifies the SPI MSB LSB transmission (whether data transfer starts from MSB or LSB bit).
  532.   *         This parameter can be a value of @ref SPI_MSB_LSB_transmission
  533.   * @retval None
  534.   */
  535. #define IS_SPI_FIRST_BIT(__BIT__) (((__BIT__) == SPI_FIRSTBIT_MSB) || \
  536.                                    ((__BIT__) == SPI_FIRSTBIT_LSB))
  537.  
  538. /** @brief  Checks if SPI TI mode parameter is in allowed range.
  539.   * @param  __MODE__: specifies the SPI TI mode.
  540.   *         This parameter can be a value of @ref SPI_TI_mode
  541.   * @retval None
  542.   */
  543. #define IS_SPI_TIMODE(__MODE__) ((__MODE__) == SPI_TIMODE_DISABLE)
  544.  
  545. /** @brief  Checks if SPI CRC calculation enabled state is in allowed range.
  546.   * @param  __CALCULATION__: specifies the SPI CRC calculation enable state.
  547.   *         This parameter can be a value of @ref SPI_CRC_Calculation
  548.   * @retval None
  549.   */
  550. #define IS_SPI_CRC_CALCULATION(__CALCULATION__) (((__CALCULATION__) == SPI_CRCCALCULATION_DISABLE) || \
  551.                                                  ((__CALCULATION__) == SPI_CRCCALCULATION_ENABLE))
  552.  
  553. /** @brief  Checks if SPI polynomial value to be used for the CRC calculation, is in allowed range.
  554.   * @param  __POLYNOMIAL__: specifies the SPI polynomial value to be used for the CRC calculation.
  555.   *         This parameter must be a number between Min_Data = 0 and Max_Data = 65535
  556.   * @retval None
  557.   */
  558. #define IS_SPI_CRC_POLYNOMIAL(__POLYNOMIAL__) (((__POLYNOMIAL__) >= 0x1) && ((__POLYNOMIAL__) <= 0xFFFF))
  559.  
  560. /** @brief  Sets the SPI transmit-only mode.
  561.   * @param  __HANDLE__: specifies the SPI Handle.
  562.   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  563.   * @retval None
  564.   */
  565. #define SPI_1LINE_TX(__HANDLE__)  SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_BIDIOE)
  566.  
  567. /** @brief  Sets the SPI receive-only mode.
  568.   * @param  __HANDLE__: specifies the SPI Handle.
  569.   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  570.   * @retval None
  571.   */              
  572. #define SPI_1LINE_RX(__HANDLE__)  CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_BIDIOE)
  573.  
  574. /** @brief  Resets the CRC calculation of the SPI.
  575.   * @param  __HANDLE__: specifies the SPI Handle.
  576.   *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
  577.   * @retval None
  578.   */
  579. #define SPI_RESET_CRC(__HANDLE__) do{CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_CRCEN);\
  580.                                      SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_CRCEN);}while(0)
  581.  
  582. /**
  583.   * @}
  584.   */
  585.  
  586. /* Exported functions --------------------------------------------------------*/
  587. /** @addtogroup SPI_Exported_Functions
  588.   * @{
  589.   */
  590.  
  591. /* Initialization/de-initialization functions  **********************************/
  592. /** @addtogroup SPI_Exported_Functions_Group1
  593.   * @{
  594.   */
  595. HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi);
  596. HAL_StatusTypeDef HAL_SPI_DeInit (SPI_HandleTypeDef *hspi);
  597. void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi);
  598. void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi);
  599. /**
  600.   * @}
  601.   */
  602.  
  603. /* I/O operation functions  *****************************************************/
  604. /** @addtogroup SPI_Exported_Functions_Group2
  605.   * @{
  606.   */
  607. HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
  608. HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
  609. HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
  610. HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
  611. HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
  612. HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
  613. HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
  614. HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
  615. HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
  616. HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi);
  617. HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi);
  618. HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi);
  619.  
  620. void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi);
  621. void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi);
  622. void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi);
  623. void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi);
  624. void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi);
  625. void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi);
  626. void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi);
  627. void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi);
  628. /**
  629.   * @}
  630.   */
  631.  
  632.  
  633. /* Peripheral State and Control functions  **************************************/
  634. /** @addtogroup SPI_Exported_Functions_Group3
  635.   * @{
  636.   */
  637. HAL_SPI_StateTypeDef HAL_SPI_GetState(SPI_HandleTypeDef *hspi);
  638. uint32_t HAL_SPI_GetError(SPI_HandleTypeDef *hspi);
  639.  
  640. /**
  641.   * @}
  642.   */
  643.  
  644. /**
  645.   * @}
  646.   */
  647.  
  648.  
  649. /* Private functions --------------------------------------------------------*/
  650. /** @addtogroup SPI_Private_Functions
  651.   * @{
  652.   */
  653. uint8_t SPI_ISCRCErrorValid(SPI_HandleTypeDef *hspi);
  654.  
  655. /**
  656.   * @}
  657.   */
  658.  
  659.  
  660. /**
  661.   * @}
  662.   */
  663.  
  664. /**
  665.   * @}
  666.   */
  667.  
  668. #ifdef __cplusplus
  669. }
  670. #endif
  671.  
  672. #endif /* __STM32F1xx_HAL_SPI_H */
  673.  
  674. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  675.