Subversion Repositories DashDisplay

Rev

Rev 2 | 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.   * @version V1.0.4
  6.   * @date    29-April-2016
  7.   * @brief   Header file of USART HAL module.
  8.   ******************************************************************************
  9.   * @attention
  10.   *
  11.   * <h2><center>&copy; COPYRIGHT(c) 2016 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_USART_H
  40. #define __STM32F1xx_HAL_USART_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 USART
  54.   * @{
  55.   */
  56.  
  57. /* Exported types ------------------------------------------------------------*/
  58. /** @defgroup USART_Exported_Types USART Exported Types
  59.   * @{
  60.   */
  61.  
  62.  
  63. /**
  64.   * @brief USART Init Structure definition
  65.   */
  66. typedef struct
  67. {
  68.   uint32_t BaudRate;                  /*!< This member configures the Usart communication baud rate.
  69.                                            The baud rate is computed using the following formula:
  70.                                            - IntegerDivider = ((PCLKx) / (16 * (husart->Init.BaudRate)))
  71.                                            - FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 16) + 0.5 */
  72.  
  73.   uint32_t WordLength;                /*!< Specifies the number of data bits transmitted or received in a frame.
  74.                                            This parameter can be a value of @ref USART_Word_Length */
  75.  
  76.   uint32_t StopBits;                  /*!< Specifies the number of stop bits transmitted.
  77.                                            This parameter can be a value of @ref USART_Stop_Bits */
  78.  
  79.   uint32_t Parity;                   /*!< Specifies the parity mode.
  80.                                            This parameter can be a value of @ref USART_Parity
  81.                                            @note When parity is enabled, the computed parity is inserted
  82.                                                  at the MSB position of the transmitted data (9th bit when
  83.                                                  the word length is set to 9 data bits; 8th bit when the
  84.                                                  word length is set to 8 data bits). */
  85.  
  86.   uint32_t Mode;                      /*!< Specifies wether the Receive or Transmit mode is enabled or disabled.
  87.                                            This parameter can be a value of @ref USART_Mode */
  88.  
  89.   uint32_t CLKPolarity;               /*!< Specifies the steady state of the serial clock.
  90.                                            This parameter can be a value of @ref USART_Clock_Polarity */
  91.  
  92.   uint32_t CLKPhase;                  /*!< Specifies the clock transition on which the bit capture is made.
  93.                                            This parameter can be a value of @ref USART_Clock_Phase */
  94.  
  95.   uint32_t CLKLastBit;                /*!< Specifies whether the clock pulse corresponding to the last transmitted
  96.                                            data bit (MSB) has to be output on the SCLK pin in synchronous mode.
  97.                                            This parameter can be a value of @ref USART_Last_Bit */
  98. }USART_InitTypeDef;
  99.  
  100. /**
  101.   * @brief HAL State structures definition
  102.   */
  103. typedef enum
  104. {
  105.   HAL_USART_STATE_RESET             = 0x00,    /*!< Peripheral is not initialized   */
  106.   HAL_USART_STATE_READY             = 0x01,    /*!< Peripheral Initialized and ready for use */
  107.   HAL_USART_STATE_BUSY              = 0x02,    /*!< an internal process is ongoing */  
  108.   HAL_USART_STATE_BUSY_TX           = 0x12,    /*!< Data Transmission process is ongoing */
  109.   HAL_USART_STATE_BUSY_RX           = 0x22,    /*!< Data Reception process is ongoing */
  110.   HAL_USART_STATE_BUSY_TX_RX        = 0x32,    /*!< Data Transmission Reception process is ongoing */
  111.   HAL_USART_STATE_TIMEOUT           = 0x03,    /*!< Timeout state */
  112.   HAL_USART_STATE_ERROR             = 0x04     /*!< Error */
  113. }HAL_USART_StateTypeDef;
  114.  
  115.  
  116. /**
  117.   * @brief  USART handle Structure definition  
  118.   */  
  119. typedef struct
  120. {
  121.   USART_TypeDef                 *Instance;        /*!< USART registers base address        */
  122.  
  123.   USART_InitTypeDef              Init;            /*!< Usart communication parameters      */
  124.  
  125.   uint8_t                       *pTxBuffPtr;      /*!< Pointer to Usart Tx transfer Buffer */
  126.  
  127.   uint16_t                       TxXferSize;      /*!< Usart Tx Transfer size              */
  128.  
  129.   __IO uint16_t                  TxXferCount;     /*!< Usart Tx Transfer Counter           */
  130.  
  131.   uint8_t                       *pRxBuffPtr;      /*!< Pointer to Usart Rx transfer Buffer */
  132.  
  133.   uint16_t                       RxXferSize;      /*!< Usart Rx Transfer size              */
  134.  
  135.   __IO uint16_t                  RxXferCount;     /*!< Usart Rx Transfer Counter           */  
  136.  
  137.   DMA_HandleTypeDef             *hdmatx;          /*!< Usart Tx DMA Handle parameters      */
  138.    
  139.   DMA_HandleTypeDef             *hdmarx;          /*!< Usart Rx DMA Handle parameters      */
  140.  
  141.   HAL_LockTypeDef                Lock;            /*!< Locking object                      */
  142.  
  143.   __IO HAL_USART_StateTypeDef    State;           /*!< Usart communication state           */
  144.  
  145.   __IO uint32_t                  ErrorCode;       /*!< USART Error code                    */
  146.  
  147. }USART_HandleTypeDef;
  148.  
  149. /**
  150.   * @}
  151.   */
  152.  
  153. /* Exported constants --------------------------------------------------------*/
  154. /** @defgroup USART_Exported_Constants USART Exported constants
  155.   * @{
  156.   */
  157.  
  158. /** @defgroup USART_Error_Codes USART Error Codes
  159.   * @{
  160.   */
  161. #define HAL_USART_ERROR_NONE      ((uint32_t)0x00)    /*!< No error            */
  162. #define HAL_USART_ERROR_PE        ((uint32_t)0x01)    /*!< Parity error        */
  163. #define HAL_USART_ERROR_NE        ((uint32_t)0x02)    /*!< Noise error         */
  164. #define HAL_USART_ERROR_FE        ((uint32_t)0x04)    /*!< frame error         */
  165. #define HAL_USART_ERROR_ORE       ((uint32_t)0x08)    /*!< Overrun error       */
  166. #define HAL_USART_ERROR_DMA       ((uint32_t)0x10)     /*!< DMA transfer error  */
  167. /**
  168.   * @}
  169.   */
  170.  
  171. /** @defgroup USART_Word_Length USART Word Length
  172.   * @{
  173.   */
  174. #define USART_WORDLENGTH_8B             ((uint32_t)0x00000000)
  175. #define USART_WORDLENGTH_9B             ((uint32_t)USART_CR1_M)
  176. /**
  177.   * @}
  178.   */
  179.  
  180. /** @defgroup USART_Stop_Bits USART Number of Stop Bits
  181.   * @{
  182.   */
  183. #define USART_STOPBITS_1                ((uint32_t)0x00000000)
  184. #define USART_STOPBITS_0_5              ((uint32_t)USART_CR2_STOP_0)
  185. #define USART_STOPBITS_2                ((uint32_t)USART_CR2_STOP_1)
  186. #define USART_STOPBITS_1_5              ((uint32_t)(USART_CR2_STOP_0 | USART_CR2_STOP_1))
  187. /**
  188.   * @}
  189.   */
  190.  
  191. /** @defgroup USART_Parity USART Parity
  192.   * @{
  193.   */
  194. #define USART_PARITY_NONE               ((uint32_t)0x00000000)
  195. #define USART_PARITY_EVEN               ((uint32_t)USART_CR1_PCE)
  196. #define USART_PARITY_ODD                ((uint32_t)(USART_CR1_PCE | USART_CR1_PS))
  197. /**
  198.   * @}
  199.   */
  200.  
  201. /** @defgroup USART_Mode USART Mode
  202.   * @{
  203.   */
  204. #define USART_MODE_RX                   ((uint32_t)USART_CR1_RE)
  205. #define USART_MODE_TX                   ((uint32_t)USART_CR1_TE)
  206. #define USART_MODE_TX_RX                ((uint32_t)(USART_CR1_TE |USART_CR1_RE))
  207.  
  208. /**
  209.   * @}
  210.   */
  211.    
  212. /** @defgroup USART_Clock USART Clock
  213.   * @{
  214.   */
  215. #define USART_CLOCK_DISABLE             ((uint32_t)0x00000000)
  216. #define USART_CLOCK_ENABLE              ((uint32_t)USART_CR2_CLKEN)
  217. /**
  218.   * @}
  219.   */
  220.  
  221. /** @defgroup USART_Clock_Polarity USART Clock Polarity
  222.   * @{
  223.   */
  224. #define USART_POLARITY_LOW              ((uint32_t)0x00000000)
  225. #define USART_POLARITY_HIGH             ((uint32_t)USART_CR2_CPOL)
  226. /**
  227.   * @}
  228.   */
  229.  
  230. /** @defgroup USART_Clock_Phase USART Clock Phase
  231.   * @{
  232.   */
  233. #define USART_PHASE_1EDGE               ((uint32_t)0x00000000)
  234. #define USART_PHASE_2EDGE               ((uint32_t)USART_CR2_CPHA)
  235. /**
  236.   * @}
  237.   */
  238.  
  239. /** @defgroup USART_Last_Bit USART Last Bit
  240.   * @{
  241.   */
  242. #define USART_LASTBIT_DISABLE           ((uint32_t)0x00000000)
  243. #define USART_LASTBIT_ENABLE            ((uint32_t)USART_CR2_LBCL)
  244. /**
  245.   * @}
  246.   */
  247.  
  248. /** @defgroup USART_NACK_State USART NACK State
  249.   * @{
  250.   */
  251. #define USART_NACK_ENABLE               ((uint32_t)USART_CR3_NACK)
  252. #define USART_NACK_DISABLE              ((uint32_t)0x00000000)
  253. /**
  254.   * @}
  255.   */
  256.  
  257. /** @defgroup USART_Flags USART Flags
  258.   *        Elements values convention: 0xXXXX
  259.   *           - 0xXXXX  : Flag mask in the SR register
  260.   * @{
  261.   */
  262.  
  263. #define USART_FLAG_CTS                  ((uint32_t)USART_SR_CTS)
  264. #define USART_FLAG_LBD                  ((uint32_t)USART_SR_LBD)
  265. #define USART_FLAG_TXE                  ((uint32_t)USART_SR_TXE)
  266. #define USART_FLAG_TC                   ((uint32_t)USART_SR_TC)
  267. #define USART_FLAG_RXNE                 ((uint32_t)USART_SR_RXNE)
  268. #define USART_FLAG_IDLE                 ((uint32_t)USART_SR_IDLE)
  269. #define USART_FLAG_ORE                  ((uint32_t)USART_SR_ORE)
  270. #define USART_FLAG_NE                   ((uint32_t)USART_SR_NE)
  271. #define USART_FLAG_FE                   ((uint32_t)USART_SR_FE)
  272. #define USART_FLAG_PE                   ((uint32_t)USART_SR_PE)
  273. /**
  274.   * @}
  275.   */
  276.  
  277. /** @defgroup USART_Interrupt_definition USART Interrupts Definition
  278.   *        Elements values convention: 0xY000XXXX
  279.   *           - XXXX  : Interrupt mask (16 bits) in the Y register
  280.   *           - Y  : Interrupt source register (4bits)
  281.   *                 - 0001: CR1 register
  282.   *                 - 0010: CR2 register
  283.   *                 - 0011: CR3 register
  284.   *
  285.   * @{
  286.   */
  287.  
  288. #define USART_IT_PE                     ((uint32_t)(USART_CR1_REG_INDEX << 28 | USART_CR1_PEIE))
  289. #define USART_IT_TXE                    ((uint32_t)(USART_CR1_REG_INDEX << 28 | USART_CR1_TXEIE))
  290. #define USART_IT_TC                     ((uint32_t)(USART_CR1_REG_INDEX << 28 | USART_CR1_TCIE))
  291. #define USART_IT_RXNE                   ((uint32_t)(USART_CR1_REG_INDEX << 28 | USART_CR1_RXNEIE))
  292. #define USART_IT_IDLE                   ((uint32_t)(USART_CR1_REG_INDEX << 28 | USART_CR1_IDLEIE))
  293.  
  294. #define USART_IT_LBD                    ((uint32_t)(USART_CR2_REG_INDEX << 28 | USART_CR2_LBDIE))
  295.  
  296. #define USART_IT_CTS                    ((uint32_t)(USART_CR3_REG_INDEX << 28 | USART_CR3_CTSIE))
  297. #define USART_IT_ERR                    ((uint32_t)(USART_CR3_REG_INDEX << 28 | USART_CR3_EIE))
  298.  
  299.  
  300. /**
  301.   * @}
  302.   */
  303.  
  304. /**
  305.   * @}
  306.   */
  307.  
  308.    
  309. /* Exported macro ------------------------------------------------------------*/
  310. /** @defgroup USART_Exported_Macros USART Exported Macros
  311.   * @{
  312.   */
  313.  
  314.  
  315. /** @brief Reset USART handle state
  316.   * @param  __HANDLE__: specifies the USART Handle.
  317.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  318.   * @retval None
  319.   */
  320. #define __HAL_USART_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_USART_STATE_RESET)
  321.  
  322. /** @brief  Check whether the specified USART flag is set or not.
  323.   * @param  __HANDLE__: specifies the USART Handle.
  324.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  325.   * @param  __FLAG__: specifies the flag to check.
  326.   *        This parameter can be one of the following values:
  327.   *            @arg USART_FLAG_TXE:  Transmit data register empty flag
  328.   *            @arg USART_FLAG_TC:   Transmission Complete flag
  329.   *            @arg USART_FLAG_RXNE: Receive data register not empty flag
  330.   *            @arg USART_FLAG_IDLE: Idle Line detection flag
  331.   *            @arg USART_FLAG_ORE:  OverRun Error flag
  332.   *            @arg USART_FLAG_NE:   Noise Error flag
  333.   *            @arg USART_FLAG_FE:   Framing Error flag
  334.   *            @arg USART_FLAG_PE:   Parity Error flag
  335.   * @retval The new state of __FLAG__ (TRUE or FALSE).
  336.   */
  337.  
  338. #define __HAL_USART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))
  339.  
  340. /** @brief  Clear the specified USART pending flags.
  341.   * @param  __HANDLE__: specifies the USART Handle.
  342.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  343.   * @param  __FLAG__: specifies the flag to check.
  344.   *          This parameter can be any combination of the following values:
  345.   *            @arg USART_FLAG_TC:   Transmission Complete flag.
  346.   *            @arg USART_FLAG_RXNE: Receive data register not empty flag.
  347.   *  
  348.   * @note   PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun
  349.   *          error) and IDLE (Idle line detected) flags are cleared by software
  350.   *          sequence: a read operation to USART_SR register followed by a read
  351.   *          operation to USART_DR register.
  352.   * @note   RXNE flag can be also cleared by a read to the USART_DR register.
  353.   * @note   TC flag can be also cleared by software sequence: a read operation to
  354.   *          USART_SR register followed by a write operation to USART_DR register.
  355.   * @note   TXE flag is cleared only by a write to the USART_DR register.
  356.   *  
  357.   * @retval None
  358.   */
  359. #define __HAL_USART_CLEAR_FLAG(__HANDLE__, __FLAG__)  ((__HANDLE__)->Instance->SR = ~(__FLAG__))
  360.  
  361. /** @brief  Clear the USART PE pending flag.
  362.   * @param  __HANDLE__: specifies the USART Handle.
  363.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  364.   * @retval None
  365.   */
  366. #define __HAL_USART_CLEAR_PEFLAG(__HANDLE__) \
  367. do{                                          \
  368.   __IO uint32_t tmpreg;                      \
  369.   tmpreg = (__HANDLE__)->Instance->SR;       \
  370.   tmpreg = (__HANDLE__)->Instance->DR;       \
  371.   UNUSED(tmpreg);                            \
  372. }while(0)
  373.  
  374.  
  375. /** @brief  Clear the USART FE pending flag.
  376.   * @param  __HANDLE__: specifies the USART Handle.
  377.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  378.   * @retval None
  379.   */
  380. #define __HAL_USART_CLEAR_FEFLAG(__HANDLE__) __HAL_USART_CLEAR_PEFLAG(__HANDLE__)
  381.  
  382. /** @brief  Clear the USART NE pending flag.
  383.   * @param  __HANDLE__: specifies the USART Handle.
  384.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  385.   * @retval None
  386.   */
  387. #define __HAL_USART_CLEAR_NEFLAG(__HANDLE__) __HAL_USART_CLEAR_PEFLAG(__HANDLE__)
  388.  
  389. /** @brief  Clear the USART ORE pending flag.
  390.   * @param  __HANDLE__: specifies the USART Handle.
  391.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  392.   * @retval None
  393.   */
  394. #define __HAL_USART_CLEAR_OREFLAG(__HANDLE__) __HAL_USART_CLEAR_PEFLAG(__HANDLE__)
  395.  
  396. /** @brief  Clear the USART IDLE pending flag.
  397.   * @param  __HANDLE__: specifies the USART Handle.
  398.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  399.   * @retval None
  400.   */
  401. #define __HAL_USART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_USART_CLEAR_PEFLAG(__HANDLE__)
  402.  
  403. /** @brief  Enable the specified Usart interrupts.
  404.   * @param  __HANDLE__: specifies the USART Handle.
  405.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  406.   * @param  __INTERRUPT__: specifies the USART interrupt source to enable.
  407.   *          This parameter can be one of the following values:
  408.   *            @arg USART_IT_TXE:  Transmit Data Register empty interrupt
  409.   *            @arg USART_IT_TC:   Transmission complete interrupt
  410.   *            @arg USART_IT_RXNE: Receive Data register not empty interrupt
  411.   *            @arg USART_IT_IDLE: Idle line detection interrupt
  412.   *            @arg USART_IT_PE:   Parity Error interrupt
  413.   *            @arg USART_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)
  414.   * @retval None
  415.   */
  416. #define __HAL_USART_ENABLE_IT(__HANDLE__, __INTERRUPT__)   ((((__INTERRUPT__) >> 28) == USART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & USART_IT_MASK)): \
  417.                                                             (((__INTERRUPT__) >> 28) == USART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 |=  ((__INTERRUPT__) & USART_IT_MASK)): \
  418.                                                             ((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & USART_IT_MASK)))
  419.  
  420.  
  421. /** @brief  Disable the specified Usart interrupts.
  422.   * @param  __HANDLE__: specifies the USART Handle.
  423.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  424.   * @param  __INTERRUPT__: specifies the USART interrupt source to disable.
  425.   *          This parameter can be one of the following values:
  426.   *            @arg USART_IT_TXE:  Transmit Data Register empty interrupt
  427.   *            @arg USART_IT_TC:   Transmission complete interrupt
  428.   *            @arg USART_IT_RXNE: Receive Data register not empty interrupt
  429.   *            @arg USART_IT_IDLE: Idle line detection interrupt
  430.   *            @arg USART_IT_PE:   Parity Error interrupt
  431.   *            @arg USART_IT_ERR:  Error interrupt(Frame error, noise error, overrun error)
  432.   * @retval None
  433.   */
  434. #define __HAL_USART_DISABLE_IT(__HANDLE__, __INTERRUPT__)  ((((__INTERRUPT__) >> 28) == USART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & USART_IT_MASK)): \
  435.                                                             (((__INTERRUPT__) >> 28) == USART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 &= ~((__INTERRUPT__) & USART_IT_MASK)): \
  436.                                                             ((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & USART_IT_MASK)))
  437.  
  438.  
  439.    
  440. /** @brief  Check whether the specified Usart interrupt has occurred or not.
  441.   * @param  __HANDLE__: specifies the USART Handle.
  442.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  443.   * @param  __IT__: specifies the USART interrupt source to check.
  444.   *          This parameter can be one of the following values:
  445.   *            @arg USART_IT_TXE: Transmit Data Register empty interrupt
  446.   *            @arg USART_IT_TC:  Transmission complete interrupt
  447.   *            @arg USART_IT_RXNE: Receive Data register not empty interrupt
  448.   *            @arg USART_IT_IDLE: Idle line detection interrupt
  449.   *            @arg USART_IT_ERR: Error interrupt
  450.   *            @arg USART_IT_PE: Parity Error interrupt
  451.   * @retval The new state of __IT__ (TRUE or FALSE).
  452.   */
  453. #define __HAL_USART_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28) == USART_CR1_REG_INDEX)? (__HANDLE__)->Instance->CR1:(((((uint32_t)(__IT__)) >> 28) == USART_CR2_REG_INDEX)? \
  454.                                                       (__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & (((uint32_t)(__IT__)) & USART_IT_MASK))
  455.  
  456. /** @brief  Enable USART
  457.   * @param  __HANDLE__: specifies the USART Handle.
  458.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  459.   * @retval None
  460.   */
  461. #define __HAL_USART_ENABLE(__HANDLE__)               SET_BIT((__HANDLE__)->Instance->CR1,(USART_CR1_UE))
  462.  
  463. /** @brief  Disable USART
  464.   * @param  __HANDLE__: specifies the USART Handle.
  465.   *         USART Handle selects the USARTx peripheral (USART availability and x value depending on device).
  466.   * @retval None
  467.   */
  468. #define __HAL_USART_DISABLE(__HANDLE__)              CLEAR_BIT((__HANDLE__)->Instance->CR1,(USART_CR1_UE))
  469.  
  470.  
  471. /**
  472.   * @}
  473.   */
  474.  
  475.  
  476. /* Private macros --------------------------------------------------------*/
  477. /** @defgroup USART_Private_Macros   USART Private Macros
  478.   * @{
  479.   */
  480.  
  481. #define USART_CR1_REG_INDEX             1    
  482. #define USART_CR2_REG_INDEX             2    
  483. #define USART_CR3_REG_INDEX             3    
  484.  
  485. #define USART_DIV(__PCLK__, __BAUD__)                (((__PCLK__)*25)/(4*(__BAUD__)))
  486. #define USART_DIVMANT(__PCLK__, __BAUD__)            (USART_DIV((__PCLK__), (__BAUD__))/100)
  487. #define USART_DIVFRAQ(__PCLK__, __BAUD__)            (((USART_DIV((__PCLK__), (__BAUD__)) - (USART_DIVMANT((__PCLK__), (__BAUD__)) * 100)) * 16 + 50) / 100)
  488. #define USART_BRR(__PCLK__, __BAUD__)                ((USART_DIVMANT((__PCLK__), (__BAUD__)) << 4)|(USART_DIVFRAQ((__PCLK__), (__BAUD__)) & 0x0F))
  489.  
  490. /** Check USART Baud rate
  491.   *      __BAUDRATE__: Baudrate specified by the user
  492.   *                    The maximum Baud Rate is derived from the maximum clock on APB (i.e. 72 MHz)
  493.   *                    divided by the smallest oversampling used on the USART (i.e. 16)
  494.   * return : TRUE or FALSE
  495.   */
  496. #define IS_USART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) < 4500001)
  497.  
  498. #define IS_USART_WORD_LENGTH(LENGTH)    (((LENGTH) == USART_WORDLENGTH_8B) || \
  499.                                          ((LENGTH) == USART_WORDLENGTH_9B))
  500.  
  501. #define IS_USART_STOPBITS(STOPBITS)     (((STOPBITS) == USART_STOPBITS_1) || \
  502.                                          ((STOPBITS) == USART_STOPBITS_0_5) || \
  503.                                          ((STOPBITS) == USART_STOPBITS_1_5) || \
  504.                                          ((STOPBITS) == USART_STOPBITS_2))
  505.  
  506. #define IS_USART_PARITY(PARITY)         (((PARITY) == USART_PARITY_NONE) || \
  507.                                          ((PARITY) == USART_PARITY_EVEN) || \
  508.                                          ((PARITY) == USART_PARITY_ODD))
  509.  
  510. #define IS_USART_MODE(MODE)             ((((MODE) & (~((uint32_t)USART_MODE_TX_RX))) == 0x00) && ((MODE) != (uint32_t)0x00000000))
  511.  
  512. #define IS_USART_CLOCK(CLOCK)           (((CLOCK) == USART_CLOCK_DISABLE) || \
  513.                                          ((CLOCK) == USART_CLOCK_ENABLE))
  514.  
  515. #define IS_USART_POLARITY(CPOL)         (((CPOL) == USART_POLARITY_LOW) || ((CPOL) == USART_POLARITY_HIGH))
  516.  
  517. #define IS_USART_PHASE(CPHA)            (((CPHA) == USART_PHASE_1EDGE) || ((CPHA) == USART_PHASE_2EDGE))
  518.  
  519. #define IS_USART_LASTBIT(LASTBIT)       (((LASTBIT) == USART_LASTBIT_DISABLE) || \
  520.                                          ((LASTBIT) == USART_LASTBIT_ENABLE))
  521.  
  522. #define IS_USART_NACK_STATE(NACK)       (((NACK) == USART_NACK_ENABLE) || \
  523.                                          ((NACK) == USART_NACK_DISABLE))
  524.  
  525. /** USART interruptions flag mask
  526.   *
  527.   */
  528. #define USART_IT_MASK  ((uint32_t) USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE | USART_CR1_RXNEIE | \
  529.                                    USART_CR1_IDLEIE | USART_CR2_LBDIE | USART_CR3_CTSIE | USART_CR3_EIE )
  530.  
  531. /**
  532.   * @}
  533.   */
  534.  
  535.  
  536. /* Exported functions --------------------------------------------------------*/
  537.  
  538. /** @addtogroup USART_Exported_Functions USART Exported Functions
  539.   * @{
  540.   */
  541.  
  542. /** @addtogroup USART_Exported_Functions_Group1 Initialization and de-initialization functions
  543.   * @{
  544.   */
  545.  
  546. /* Initialization and de-initialization functions  ******************************/
  547. HAL_StatusTypeDef HAL_USART_Init(USART_HandleTypeDef *husart);
  548. HAL_StatusTypeDef HAL_USART_DeInit(USART_HandleTypeDef *husart);
  549. void HAL_USART_MspInit(USART_HandleTypeDef *husart);
  550. void HAL_USART_MspDeInit(USART_HandleTypeDef *husart);
  551.  
  552. /**
  553.   * @}
  554.   */
  555.  
  556. /** @addtogroup USART_Exported_Functions_Group2 IO operation functions
  557.   * @{
  558.   */
  559.  
  560. /* IO operation functions *******************************************************/
  561. HAL_StatusTypeDef HAL_USART_Transmit(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size, uint32_t Timeout);
  562. HAL_StatusTypeDef HAL_USART_Receive(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
  563. HAL_StatusTypeDef HAL_USART_TransmitReceive(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
  564. HAL_StatusTypeDef HAL_USART_Transmit_IT(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size);
  565. HAL_StatusTypeDef HAL_USART_Receive_IT(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size);
  566. HAL_StatusTypeDef HAL_USART_TransmitReceive_IT(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData,  uint16_t Size);
  567. HAL_StatusTypeDef HAL_USART_Transmit_DMA(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size);
  568. HAL_StatusTypeDef HAL_USART_Receive_DMA(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size);
  569. HAL_StatusTypeDef HAL_USART_TransmitReceive_DMA(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
  570. HAL_StatusTypeDef HAL_USART_DMAPause(USART_HandleTypeDef *husart);
  571. HAL_StatusTypeDef HAL_USART_DMAResume(USART_HandleTypeDef *husart);
  572. HAL_StatusTypeDef HAL_USART_DMAStop(USART_HandleTypeDef *husart);
  573. void HAL_USART_IRQHandler(USART_HandleTypeDef *husart);
  574. void HAL_USART_TxCpltCallback(USART_HandleTypeDef *husart);
  575. void HAL_USART_TxHalfCpltCallback(USART_HandleTypeDef *husart);
  576. void HAL_USART_RxCpltCallback(USART_HandleTypeDef *husart);
  577. void HAL_USART_RxHalfCpltCallback(USART_HandleTypeDef *husart);
  578. void HAL_USART_TxRxCpltCallback(USART_HandleTypeDef *husart);
  579. void HAL_USART_ErrorCallback(USART_HandleTypeDef *husart);
  580.  
  581. /**
  582.   * @}
  583.   */
  584.  
  585. /* Peripheral Control functions ***********************************************/
  586.  
  587. /** @addtogroup USART_Exported_Functions_Group3 Peripheral State and Errors functions
  588.   * @{
  589.   */
  590.  
  591. /* Peripheral State and Error functions ***************************************/
  592. HAL_USART_StateTypeDef HAL_USART_GetState(USART_HandleTypeDef *husart);
  593. uint32_t               HAL_USART_GetError(USART_HandleTypeDef *husart);
  594.  
  595. /**
  596.   * @}
  597.   */
  598.  
  599. /**
  600.   * @}
  601.   */
  602.  
  603. /**
  604.   * @}
  605.   */
  606.  
  607. /**
  608.   * @}
  609.   */
  610.  
  611. #ifdef __cplusplus
  612. }
  613. #endif
  614.  
  615. #endif /* __STM32F1xx_HAL_USART_H */
  616.  
  617. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  618.