Subversion Repositories LedShow

Rev

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

  1. /**
  2.   ******************************************************************************
  3.   * @file    stm32f1xx_hal_usart.h
  4.   * @author  MCD Application Team
  5.   * @brief   Header file of USART HAL module.
  6.   ******************************************************************************
  7.   * @attention
  8.   *
  9.   * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
  10.   *
  11.   * Redistribution and use in source and binary forms, with or without modification,
  12.   * are permitted provided that the following conditions are met:
  13.   *   1. Redistributions of source code must retain the above copyright notice,
  14.   *      this list of conditions and the following disclaimer.
  15.   *   2. Redistributions in binary form must reproduce the above copyright notice,
  16.   *      this list of conditions and the following disclaimer in the documentation
  17.   *      and/or other materials provided with the distribution.
  18.   *   3. Neither the name of STMicroelectronics nor the names of its contributors
  19.   *      may be used to endorse or promote products derived from this software
  20.   *      without specific prior written permission.
  21.   *
  22.   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  23.   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24.   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  25.   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  26.   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27.   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  28.   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  29.   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  30.   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  31.   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  32.   *
  33.   ******************************************************************************
  34.   */
  35.  
  36. /* Define to prevent recursive inclusion -------------------------------------*/
  37. #ifndef __STM32F1xx_HAL_USART_H
  38. #define __STM32F1xx_HAL_USART_H
  39.  
  40. #ifdef __cplusplus
  41.  extern "C" {
  42. #endif
  43.  
  44. /* Includes ------------------------------------------------------------------*/
  45. #include "stm32f1xx_hal_def.h"
  46.  
  47. /** @addtogroup STM32F1xx_HAL_Driver
  48.   * @{
  49.   */
  50.  
  51. /** @addtogroup USART
  52.   * @{
  53.   */
  54.  
  55. /* Exported types ------------------------------------------------------------*/
  56. /** @defgroup USART_Exported_Types USART Exported Types
  57.   * @{
  58.   */
  59.  
  60. /**
  61.   * @brief USART Init Structure definition
  62.   */
  63. typedef struct
  64. {
  65.   uint32_t BaudRate;                  /*!< This member configures the Usart communication baud rate.
  66.                                            The baud rate is computed using the following formula:
  67.                                            - IntegerDivider = ((PCLKx) / (16 * (husart->Init.BaudRate)))
  68.                                            - FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 16) + 0.5 */
  69.  
  70.   uint32_t WordLength;                /*!< Specifies the number of data bits transmitted or received in a frame.
  71.                                            This parameter can be a value of @ref USART_Word_Length */
  72.  
  73.   uint32_t StopBits;                  /*!< Specifies the number of stop bits transmitted.
  74.                                            This parameter can be a value of @ref USART_Stop_Bits */
  75.  
  76.   uint32_t Parity;                    /*!< Specifies the parity mode.
  77.                                            This parameter can be a value of @ref USART_Parity
  78.                                            @note When parity is enabled, the computed parity is inserted
  79.                                                  at the MSB position of the transmitted data (9th bit when
  80.                                                  the word length is set to 9 data bits; 8th bit when the
  81.                                                  word length is set to 8 data bits). */
  82.  
  83.   uint32_t Mode;                      /*!< Specifies whether the Receive or Transmit mode is enabled or disabled.
  84.                                            This parameter can be a value of @ref USART_Mode */
  85.  
  86.   uint32_t CLKPolarity;               /*!< Specifies the steady state of the serial clock.
  87.                                            This parameter can be a value of @ref USART_Clock_Polarity */
  88.  
  89.   uint32_t CLKPhase;                  /*!< Specifies the clock transition on which the bit capture is made.
  90.                                            This parameter can be a value of @ref USART_Clock_Phase */
  91.  
  92.   uint32_t CLKLastBit;                /*!< Specifies whether the clock pulse corresponding to the last transmitted
  93.                                            data bit (MSB) has to be output on the SCLK pin in synchronous mode.
  94.                                            This parameter can be a value of @ref USART_Last_Bit */
  95. }USART_InitTypeDef;
  96.  
  97. /**
  98.   * @brief HAL State structures definition
  99.   */
  100. typedef enum
  101. {
  102.   HAL_USART_STATE_RESET             = 0x00U,    /*!< Peripheral is not yet initialized   */
  103.   HAL_USART_STATE_READY             = 0x01U,    /*!< Peripheral Initialized and ready for use */
  104.   HAL_USART_STATE_BUSY              = 0x02U,    /*!< an internal process is ongoing */  
  105.   HAL_USART_STATE_BUSY_TX           = 0x12U,    /*!< Data Transmission process is ongoing */
  106.   HAL_USART_STATE_BUSY_RX           = 0x22U,    /*!< Data Reception process is ongoing */
  107.   HAL_USART_STATE_BUSY_TX_RX        = 0x32U,    /*!< Data Transmission Reception process is ongoing */
  108.   HAL_USART_STATE_TIMEOUT           = 0x03U,    /*!< Timeout state */
  109.   HAL_USART_STATE_ERROR             = 0x04U     /*!< Error */
  110. }HAL_USART_StateTypeDef;
  111.  
  112. /**
  113.   * @brief  USART handle Structure definition  
  114.   */  
  115. typedef struct
  116. {
  117.   USART_TypeDef                 *Instance;        /*!< USART registers base address        */
  118.  
  119.   USART_InitTypeDef             Init;             /*!< Usart communication parameters      */
  120.  
  121.   uint8_t                       *pTxBuffPtr;      /*!< Pointer to Usart Tx transfer Buffer */
  122.  
  123.   uint16_t                      TxXferSize;       /*!< Usart Tx Transfer size              */
  124.  
  125.   __IO uint16_t                 TxXferCount;      /*!< Usart Tx Transfer Counter           */
  126.  
  127.   uint8_t                       *pRxBuffPtr;      /*!< Pointer to Usart Rx transfer Buffer */
  128.  
  129.   uint16_t                      RxXferSize;       /*!< Usart Rx Transfer size              */
  130.  
  131.   __IO uint16_t                 RxXferCount;      /*!< Usart Rx Transfer Counter           */
  132.  
  133.   DMA_HandleTypeDef             *hdmatx;          /*!< Usart Tx DMA Handle parameters      */
  134.  
  135.   DMA_HandleTypeDef             *hdmarx;          /*!< Usart Rx DMA Handle parameters      */
  136.  
  137.   HAL_LockTypeDef               Lock;             /*!< Locking object                      */
  138.  
  139.   __IO HAL_USART_StateTypeDef   State;            /*!< Usart communication state           */
  140.  
  141.   __IO uint32_t                 ErrorCode;        /*!< USART Error code                    */
  142. }USART_HandleTypeDef;
  143. /**
  144.   * @}
  145.   */
  146.  
  147. /* Exported constants --------------------------------------------------------*/
  148. /** @defgroup USART_Exported_Constants USART Exported Constants
  149.   * @{
  150.   */
  151.  
  152. /** @defgroup USART_Error_Code USART Error Code
  153.   * @brief    USART Error Code
  154.   * @{
  155.   */
  156. #define HAL_USART_ERROR_NONE         0x00000000U   /*!< No error            */
  157. #define HAL_USART_ERROR_PE           0x00000001U   /*!< Parity error        */
  158. #define HAL_USART_ERROR_NE           0x00000002U   /*!< Noise error         */
  159. #define HAL_USART_ERROR_FE           0x00000004U   /*!< Frame error         */
  160. #define HAL_USART_ERROR_ORE          0x00000008U   /*!< Overrun error       */
  161. #define HAL_USART_ERROR_DMA          0x00000010U   /*!< DMA transfer error  */
  162. /**
  163.   * @}
  164.   */
  165.  
  166. /** @defgroup USART_Word_Length USART Word Length
  167.   * @{
  168.   */
  169. #define USART_WORDLENGTH_8B                  0x00000000U
  170. #define USART_WORDLENGTH_9B                  ((uint32_t)USART_CR1_M)
  171. /**
  172.   * @}
  173.   */
  174.  
  175. /** @defgroup USART_Stop_Bits USART Number of Stop Bits
  176.   * @{
  177.   */
  178. #define USART_STOPBITS_1                     0x00000000U
  179. #define USART_STOPBITS_0_5                   ((uint32_t)USART_CR2_STOP_0)
  180. #define USART_STOPBITS_2                     ((uint32_t)USART_CR2_STOP_1)
  181. #define USART_STOPBITS_1_5                   ((uint32_t)(USART_CR2_STOP_0 | USART_CR2_STOP_1))
  182. /**
  183.   * @}
  184.   */
  185.  
  186. /** @defgroup USART_Parity USART Parity
  187.   * @{
  188.   */
  189. #define USART_PARITY_NONE                    0x00000000U
  190. #define USART_PARITY_EVEN                    ((uint32_t)USART_CR1_PCE)
  191. #define USART_PARITY_ODD                     ((uint32_t)(USART_CR1_PCE | USART_CR1_PS))
  192. /**
  193.   * @}
  194.   */
  195.  
  196. /** @defgroup USART_Mode USART Mode
  197.   * @{
  198.   */
  199. #define USART_MODE_RX                        ((uint32_t)USART_CR1_RE)
  200. #define USART_MODE_TX                        ((uint32_t)USART_CR1_TE)
  201. #define USART_MODE_TX_RX                     ((uint32_t)(USART_CR1_TE |USART_CR1_RE))
  202. /**
  203.   * @}
  204.   */
  205.    
  206. /** @defgroup USART_Clock USART Clock
  207.   * @{
  208.   */
  209. #define USART_CLOCK_DISABLE                 0x00000000U
  210. #define USART_CLOCK_ENABLE                  ((uint32_t)USART_CR2_CLKEN)
  211. /**
  212.   * @}
  213.   */
  214.  
  215. /** @defgroup USART_Clock_Polarity USART Clock Polarity
  216.   * @{
  217.   */
  218. #define USART_POLARITY_LOW                   0x00000000U
  219. #define USART_POLARITY_HIGH                  ((uint32_t)USART_CR2_CPOL)
  220. /**
  221.   * @}
  222.   */
  223.  
  224. /** @defgroup USART_Clock_Phase USART Clock Phase
  225.   * @{
  226.   */
  227. #define USART_PHASE_1EDGE                    0x00000000U
  228. #define USART_PHASE_2EDGE                    ((uint32_t)USART_CR2_CPHA)
  229. /**
  230.   * @}
  231.   */
  232.  
  233. /** @defgroup USART_Last_Bit USART Last Bit
  234.   * @{
  235.   */
  236. #define USART_LASTBIT_DISABLE                0x00000000U
  237. #define USART_LASTBIT_ENABLE                 ((uint32_t)USART_CR2_LBCL)
  238. /**
  239.   * @}
  240.   */
  241.  
  242. /** @defgroup USART_NACK_State USART NACK State
  243.   * @{
  244.   */
  245. #define USART_NACK_ENABLE           ((uint32_t)USART_CR3_NACK)
  246. #define USART_NACK_DISABLE          0x00000000U
  247. /**
  248.   * @}
  249.   */
  250.  
  251. /** @defgroup USART_Flags USART Flags
  252.   *        Elements values convention: 0xXXXX
  253.   *           - 0xXXXX  : Flag mask in the SR register
  254.   * @{
  255.   */
  256. #define USART_FLAG_TXE                  ((uint32_t)USART_SR_TXE)
  257. #define USART_FLAG_TC                   ((uint32_t)USART_SR_TC)
  258. #define USART_FLAG_RXNE                 ((uint32_t)USART_SR_RXNE)
  259. #define USART_FLAG_IDLE                 ((uint32_t)USART_SR_IDLE)
  260. #define USART_FLAG_ORE                  ((uint32_t)USART_SR_ORE)
  261. #define USART_FLAG_NE                   ((uint32_t)USART_SR_NE)
  262. #define USART_FLAG_FE                   ((uint32_t)USART_SR_FE)
  263. #define USART_FLAG_PE                   ((uint32_t)USART_SR_PE)
  264. /**
  265.   * @}
  266.   */
  267.  
  268. /** @defgroup USART_Interrupt_definition USART Interrupts Definition
  269.   *        Elements values convention: 0xY000XXXX
  270.   *           - XXXX  : Interrupt mask in the XX register
  271.   *           - Y  : Interrupt source register (2bits)
  272.   *                 - 01: CR1 register
  273.   *                 - 10: CR2 register
  274.   *                 - 11: CR3 register
  275.   *
  276.   * @{
  277.   */
  278.  
  279. #define USART_IT_PE                     ((uint32_t)(USART_CR1_REG_INDEX << 28U | USART_CR1_PEIE))
  280. #define USART_IT_TXE                    ((uint32_t)(USART_CR1_REG_INDEX << 28U | USART_CR1_TXEIE))
  281. #define USART_IT_TC                     ((uint32_t)(USART_CR1_REG_INDEX << 28U | USART_CR1_TCIE))
  282. #define USART_IT_RXNE                   ((uint32_t)(USART_CR1_REG_INDEX << 28U | USART_CR1_RXNEIE))
  283. #define USART_IT_IDLE                   ((uint32_t)(USART_CR1_REG_INDEX << 28U | USART_CR1_IDLEIE))
  284.  
  285. #define USART_IT_LBD                    ((uint32_t)(USART_CR2_REG_INDEX << 28U | USART_CR2_LBDIE))
  286.  
  287. #define USART_IT_CTS                    ((uint32_t)(USART_CR3_REG_INDEX << 28U | USART_CR3_CTSIE))
  288. #define USART_IT_ERR                    ((uint32_t)(USART_CR3_REG_INDEX << 28U | USART_CR3_EIE))
  289. /**
  290.   * @}
  291.   */
  292.  
  293. /**
  294.   * @}
  295.   */
  296.  
  297. /* Exported macro ------------------------------------------------------------*/
  298. /** @defgroup USART_Exported_Macros USART Exported Macros
  299.   * @{
  300.   */
  301.  
  302. /** @brief Reset USART handle state
  303.   * @param  __HANDLE__: specifies the USART Handle.
  304.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  305.   */
  306. #define __HAL_USART_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_USART_STATE_RESET)
  307.  
  308. /** @brief  Checks whether the specified USART flag is set or not.
  309.   * @param  __HANDLE__: specifies the USART Handle.
  310.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  311.   * @param  __FLAG__: specifies the flag to check.
  312.   *        This parameter can be one of the following values:
  313.   *            @arg USART_FLAG_TXE:  Transmit data register empty flag
  314.   *            @arg USART_FLAG_TC:   Transmission Complete flag
  315.   *            @arg USART_FLAG_RXNE: Receive data register not empty flag
  316.   *            @arg USART_FLAG_IDLE: Idle Line detection flag
  317.   *            @arg USART_FLAG_ORE:  OverRun Error flag
  318.   *            @arg USART_FLAG_NE:   Noise Error flag
  319.   *            @arg USART_FLAG_FE:   Framing Error flag
  320.   *            @arg USART_FLAG_PE:   Parity Error flag
  321.   * @retval The new state of __FLAG__ (TRUE or FALSE).
  322.   */
  323. #define __HAL_USART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))
  324.  
  325. /** @brief  Clears the specified USART pending flags.
  326.   * @param  __HANDLE__: specifies the USART Handle.
  327.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  328.   * @param  __FLAG__: specifies the flag to check.
  329.   *          This parameter can be any combination of the following values:
  330.   *            @arg USART_FLAG_TC:   Transmission Complete flag.
  331.   *            @arg USART_FLAG_RXNE: Receive data register not empty flag.
  332.   *  
  333.   * @note   PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun
  334.   *          error) and IDLE (Idle line detected) flags are cleared by software
  335.   *          sequence: a read operation to USART_SR register followed by a read
  336.   *          operation to USART_DR register.
  337.   * @note   RXNE flag can be also cleared by a read to the USART_DR register.
  338.   * @note   TC flag can be also cleared by software sequence: a read operation to
  339.   *          USART_SR register followed by a write operation to USART_DR register
  340.   * @note   TXE flag is cleared only by a write to the USART_DR register
  341.   *  
  342.   */
  343. #define __HAL_USART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__))
  344.  
  345. /** @brief  Clear the USART PE pending flag.
  346.   * @param  __HANDLE__: specifies the USART Handle.
  347.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  348.   */
  349. #define __HAL_USART_CLEAR_PEFLAG(__HANDLE__)    \
  350.   do{                                           \
  351.     __IO uint32_t tmpreg = 0x00U;               \
  352.     tmpreg = (__HANDLE__)->Instance->SR;        \
  353.     tmpreg = (__HANDLE__)->Instance->DR;        \
  354.     UNUSED(tmpreg);                             \
  355.   } while(0U)
  356.  
  357. /** @brief  Clear the USART FE pending flag.
  358.   * @param  __HANDLE__: specifies the USART Handle.
  359.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  360.   */
  361. #define __HAL_USART_CLEAR_FEFLAG(__HANDLE__) __HAL_USART_CLEAR_PEFLAG(__HANDLE__)
  362.  
  363. /** @brief  Clear the USART NE pending flag.
  364.   * @param  __HANDLE__: specifies the USART Handle.
  365.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  366.   */
  367. #define __HAL_USART_CLEAR_NEFLAG(__HANDLE__) __HAL_USART_CLEAR_PEFLAG(__HANDLE__)
  368.  
  369. /** @brief  Clear the USART ORE pending flag.
  370.   * @param  __HANDLE__: specifies the USART Handle.
  371.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  372.  
  373.   */
  374. #define __HAL_USART_CLEAR_OREFLAG(__HANDLE__) __HAL_USART_CLEAR_PEFLAG(__HANDLE__)
  375.  
  376. /** @brief  Clear the USART IDLE pending flag.
  377.   * @param  __HANDLE__: specifies the USART Handle.
  378.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  379.   */
  380. #define __HAL_USART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_USART_CLEAR_PEFLAG(__HANDLE__)
  381.  
  382. /** @brief  Enable the specified USART interrupts.
  383.   * @param  __HANDLE__: specifies the USART Handle.
  384.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  385.   * @param  __INTERRUPT__: specifies the USART interrupt source to enable.
  386.   *          This parameter can be one of the following values:
  387.   *            @arg USART_IT_TXE:  Transmit Data Register empty interrupt
  388.   *            @arg USART_IT_TC:   Transmission complete interrupt
  389.   *            @arg USART_IT_RXNE: Receive Data register not empty interrupt
  390.   *            @arg USART_IT_IDLE: Idle line detection interrupt
  391.   *            @arg USART_IT_PE:   Parity Error interrupt
  392.   *            @arg USART_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)
  393.   *          This parameter can be: ENABLE or DISABLE.
  394.   */
  395. #define __HAL_USART_ENABLE_IT(__HANDLE__, __INTERRUPT__)   ((((__INTERRUPT__) >> 28U) == USART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & USART_IT_MASK)): \
  396.                                                             (((__INTERRUPT__) >> 28U) == USART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 |=  ((__INTERRUPT__) & USART_IT_MASK)): \
  397.                                                             ((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & USART_IT_MASK)))
  398.  
  399. /** @brief  Disable the specified USART interrupts.
  400.   * @param  __HANDLE__: specifies the USART Handle.
  401.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  402.   * @param  __INTERRUPT__: specifies the USART interrupt source to disable.
  403.   *          This parameter can be one of the following values:
  404.   *            @arg USART_IT_TXE:  Transmit Data Register empty interrupt
  405.   *            @arg USART_IT_TC:   Transmission complete interrupt
  406.   *            @arg USART_IT_RXNE: Receive Data register not empty interrupt
  407.   *            @arg USART_IT_IDLE: Idle line detection interrupt
  408.   *            @arg USART_IT_PE:   Parity Error interrupt
  409.   *            @arg USART_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)
  410.   *          This parameter can be: ENABLE or DISABLE.
  411.   */
  412. #define __HAL_USART_DISABLE_IT(__HANDLE__, __INTERRUPT__)  ((((__INTERRUPT__) >> 28U) == USART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & USART_IT_MASK)): \
  413.                                                             (((__INTERRUPT__) >> 28U) == USART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 &= ~((__INTERRUPT__) & USART_IT_MASK)): \
  414.                                                              ((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & USART_IT_MASK)))
  415.  
  416. /** @brief  Checks whether the specified USART interrupt has occurred or not.
  417.   * @param  __HANDLE__: specifies the USART Handle.
  418.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  419.   * @param  __IT__: specifies the USART interrupt source to check.
  420.   *          This parameter can be one of the following values:
  421.   *            @arg USART_IT_TXE: Transmit Data Register empty interrupt
  422.   *            @arg USART_IT_TC:  Transmission complete interrupt
  423.   *            @arg USART_IT_RXNE: Receive Data register not empty interrupt
  424.   *            @arg USART_IT_IDLE: Idle line detection interrupt
  425.   *            @arg USART_IT_ERR: Error interrupt
  426.   *            @arg USART_IT_PE: Parity Error interrupt
  427.   * @retval The new state of __IT__ (TRUE or FALSE).
  428.   */
  429. #define __HAL_USART_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28U) == USART_CR1_REG_INDEX)? (__HANDLE__)->Instance->CR1:(((((uint32_t)(__IT__)) >> 28U) == USART_CR2_REG_INDEX)? \
  430.                                                       (__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & (((uint32_t)(__IT__)) & USART_IT_MASK))
  431.  
  432. /** @brief  Enable USART
  433.   * @param  __HANDLE__: specifies the USART Handle.
  434.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  435.   */
  436. #define __HAL_USART_ENABLE(__HANDLE__)               SET_BIT((__HANDLE__)->Instance->CR1,(USART_CR1_UE))
  437.  
  438. /** @brief  Disable USART
  439.   * @param  __HANDLE__: specifies the USART Handle.
  440.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  441.   */
  442. #define __HAL_USART_DISABLE(__HANDLE__)              CLEAR_BIT((__HANDLE__)->Instance->CR1,(USART_CR1_UE))
  443. /**
  444.   * @}
  445.   */
  446. /* Exported functions --------------------------------------------------------*/
  447. /** @addtogroup USART_Exported_Functions
  448.   * @{
  449.   */
  450.  
  451. /** @addtogroup USART_Exported_Functions_Group1
  452.   * @{
  453.   */
  454. /* Initialization/de-initialization functions  **********************************/
  455. HAL_StatusTypeDef HAL_USART_Init(USART_HandleTypeDef *husart);
  456. HAL_StatusTypeDef HAL_USART_DeInit(USART_HandleTypeDef *husart);
  457. void HAL_USART_MspInit(USART_HandleTypeDef *husart);
  458. void HAL_USART_MspDeInit(USART_HandleTypeDef *husart);
  459. /**
  460.   * @}
  461.   */
  462.  
  463. /** @addtogroup USART_Exported_Functions_Group2
  464.   * @{
  465.   */
  466. /* IO operation functions *******************************************************/
  467. HAL_StatusTypeDef HAL_USART_Transmit(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size, uint32_t Timeout);
  468. HAL_StatusTypeDef HAL_USART_Receive(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
  469. HAL_StatusTypeDef HAL_USART_TransmitReceive(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
  470. HAL_StatusTypeDef HAL_USART_Transmit_IT(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size);
  471. HAL_StatusTypeDef HAL_USART_Receive_IT(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size);
  472. HAL_StatusTypeDef HAL_USART_TransmitReceive_IT(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData,  uint16_t Size);
  473. HAL_StatusTypeDef HAL_USART_Transmit_DMA(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size);
  474. HAL_StatusTypeDef HAL_USART_Receive_DMA(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size);
  475. HAL_StatusTypeDef HAL_USART_TransmitReceive_DMA(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
  476. HAL_StatusTypeDef HAL_USART_DMAPause(USART_HandleTypeDef *husart);
  477. HAL_StatusTypeDef HAL_USART_DMAResume(USART_HandleTypeDef *husart);
  478. HAL_StatusTypeDef HAL_USART_DMAStop(USART_HandleTypeDef *husart);
  479. /* Transfer Abort functions */
  480. HAL_StatusTypeDef HAL_USART_Abort(USART_HandleTypeDef *husart);
  481. HAL_StatusTypeDef HAL_USART_Abort_IT(USART_HandleTypeDef *husart);
  482.  
  483. void HAL_USART_IRQHandler(USART_HandleTypeDef *husart);
  484. void HAL_USART_TxCpltCallback(USART_HandleTypeDef *husart);
  485. void HAL_USART_TxHalfCpltCallback(USART_HandleTypeDef *husart);
  486. void HAL_USART_RxCpltCallback(USART_HandleTypeDef *husart);
  487. void HAL_USART_RxHalfCpltCallback(USART_HandleTypeDef *husart);
  488. void HAL_USART_TxRxCpltCallback(USART_HandleTypeDef *husart);
  489. void HAL_USART_ErrorCallback(USART_HandleTypeDef *husart);
  490. void HAL_USART_AbortCpltCallback (USART_HandleTypeDef *husart);
  491. /**
  492.   * @}
  493.   */
  494.  
  495. /** @addtogroup USART_Exported_Functions_Group3
  496.   * @{
  497.   */
  498. /* Peripheral State functions  ************************************************/
  499. HAL_USART_StateTypeDef HAL_USART_GetState(USART_HandleTypeDef *husart);
  500. uint32_t               HAL_USART_GetError(USART_HandleTypeDef *husart);
  501. /**
  502.   * @}
  503.   */
  504.  
  505. /**
  506.   * @}
  507.   */
  508. /* Private types -------------------------------------------------------------*/
  509. /* Private variables ---------------------------------------------------------*/
  510. /* Private constants ---------------------------------------------------------*/
  511. /** @defgroup USART_Private_Constants USART Private Constants
  512.   * @{
  513.   */
  514. /** @brief USART interruptions flag mask
  515.   *
  516.   */
  517. #define USART_IT_MASK                   0x0000FFFFU
  518.  
  519. #define USART_CR1_REG_INDEX             1U
  520. #define USART_CR2_REG_INDEX             2U
  521. #define USART_CR3_REG_INDEX             3U
  522. /**
  523.   * @}
  524.   */
  525.  
  526. /* Private macros ------------------------------------------------------------*/
  527. /** @defgroup USART_Private_Macros USART Private Macros
  528.   * @{
  529.   */
  530. #define IS_USART_NACK_STATE(NACK) (((NACK) == USART_NACK_ENABLE) || \
  531.                                    ((NACK) == USART_NACK_DISABLE))
  532.  
  533. #define IS_USART_LASTBIT(LASTBIT) (((LASTBIT) == USART_LASTBIT_DISABLE) || \
  534.                                    ((LASTBIT) == USART_LASTBIT_ENABLE))
  535.  
  536. #define IS_USART_PHASE(CPHA) (((CPHA) == USART_PHASE_1EDGE) || ((CPHA) == USART_PHASE_2EDGE))
  537.  
  538. #define IS_USART_POLARITY(CPOL) (((CPOL) == USART_POLARITY_LOW) || ((CPOL) == USART_POLARITY_HIGH))
  539.  
  540. #define IS_USART_CLOCK(CLOCK) (((CLOCK) == USART_CLOCK_DISABLE) || \
  541.                                ((CLOCK) == USART_CLOCK_ENABLE))
  542.  
  543. #define IS_USART_WORD_LENGTH(LENGTH) (((LENGTH) == USART_WORDLENGTH_8B) || \
  544.                                       ((LENGTH) == USART_WORDLENGTH_9B))
  545.  
  546. #define IS_USART_STOPBITS(STOPBITS) (((STOPBITS) == USART_STOPBITS_1)   || \
  547.                                      ((STOPBITS) == USART_STOPBITS_0_5) || \
  548.                                      ((STOPBITS) == USART_STOPBITS_1_5) || \
  549.                                      ((STOPBITS) == USART_STOPBITS_2))
  550.  
  551. #define IS_USART_PARITY(PARITY) (((PARITY) == USART_PARITY_NONE) || \
  552.                                  ((PARITY) == USART_PARITY_EVEN) || \
  553.                                  ((PARITY) == USART_PARITY_ODD))
  554.  
  555. #define IS_USART_MODE(MODE) ((((MODE) & 0xFFF3U) == 0x00U) && ((MODE) != 0x00U))
  556.  
  557. #define IS_USART_BAUDRATE(BAUDRATE) ((BAUDRATE) < 4500001U)
  558.  
  559. #define USART_DIV(_PCLK_, _BAUD_) (((_PCLK_)*25U)/(2U*(_BAUD_)))
  560.  
  561. #define USART_DIVMANT(_PCLK_, _BAUD_) (USART_DIV((_PCLK_), (_BAUD_))/100U)
  562.  
  563. #define USART_DIVFRAQ(_PCLK_, _BAUD_) (((USART_DIV((_PCLK_), (_BAUD_)) - (USART_DIVMANT((_PCLK_), (_BAUD_)) * 100U)) * 16U + 50U) / 100U)
  564.  
  565. #define USART_BRR(_PCLK_, _BAUD_) ((USART_DIVMANT((_PCLK_), (_BAUD_)) << 4U)|(USART_DIVFRAQ((_PCLK_), (_BAUD_)) & 0x0FU))
  566. /**
  567.   * @}
  568.   */
  569.  
  570. /* Private functions ---------------------------------------------------------*/
  571. /** @defgroup USART_Private_Functions USART Private Functions
  572.   * @{
  573.   */
  574.  
  575. /**
  576.   * @}
  577.   */
  578.  
  579. /**
  580.   * @}
  581.   */
  582.  
  583. /**
  584.   * @}
  585.   */
  586.  
  587. #ifdef __cplusplus
  588. }
  589. #endif
  590.  
  591. #endif /* __STM32F1xx_HAL_USART_H */
  592.  
  593. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  594.