wm_uart.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. #ifndef __WM_UART_H__
  2. #define __WM_UART_H__
  3. #include "wm_hal.h"
  4. typedef struct
  5. {
  6. uint32_t BaudRate; /*!< This member configures the UART communication baud rate.
  7. The baud rate is computed using the following formula:
  8. - IntegerDivider = ((PCLKx) / (16 * (huart->Init.BaudRate)))
  9. - FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 16) + 0.5 */
  10. uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame.
  11. This parameter can be a value of @ref UART_Word_Length */
  12. uint32_t StopBits; /*!< Specifies the number of stop bits transmitted.
  13. This parameter can be a value of @ref UART_Stop_Bits */
  14. uint32_t Parity; /*!< Specifies the parity mode.
  15. This parameter can be a value of @ref UART_Parity
  16. @note When parity is enabled, the computed parity is inserted
  17. at the MSB position of the transmitted data (9th bit when
  18. the word length is set to 9 data bits; 8th bit when the
  19. word length is set to 8 data bits). */
  20. uint32_t Mode; /*!< Specifies whether the Receive or Transmit mode is enabled or disabled.
  21. This parameter can be a value of @ref UART_Mode */
  22. uint32_t HwFlowCtl; /*!< Specifies whether the hardware flow control mode is enabled or disabled.
  23. This parameter can be a value of @ref UART_Hardware_Flow_Control */
  24. uint32_t OverSampling; /*!< Specifies whether the Over sampling 8 is enabled or disabled, to achieve higher speed (up to fPCLK/8).
  25. This parameter can be a value of @ref UART_Over_Sampling. This feature is only available
  26. on STM32F100xx family, so OverSampling parameter should always be set to 16. */
  27. } UART_InitTypeDef;
  28. typedef enum
  29. {
  30. HAL_UART_STATE_RESET = 0x00U, /*!< Peripheral is not yet Initialized
  31. Value is allowed for gState and RxState */
  32. HAL_UART_STATE_READY = 0x20U, /*!< Peripheral Initialized and ready for use
  33. Value is allowed for gState and RxState */
  34. HAL_UART_STATE_BUSY = 0x24U, /*!< an internal process is ongoing
  35. Value is allowed for gState only */
  36. HAL_UART_STATE_BUSY_TX = 0x21U, /*!< Data Transmission process is ongoing
  37. Value is allowed for gState only */
  38. HAL_UART_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing
  39. Value is allowed for RxState only */
  40. HAL_UART_STATE_BUSY_TX_RX = 0x23U, /*!< Data Transmission and Reception process is ongoing
  41. Not to be used for neither gState nor RxState.
  42. Value is result of combination (Or) between gState and RxState values */
  43. HAL_UART_STATE_TIMEOUT = 0xA0U, /*!< Timeout state
  44. Value is allowed for gState only */
  45. HAL_UART_STATE_ERROR = 0xE0U /*!< Error
  46. Value is allowed for gState only */
  47. } HAL_UART_StateTypeDef;
  48. typedef struct __UART_HandleTypeDef
  49. {
  50. USART_TypeDef *Instance; /*!< UART registers base address */
  51. UART_InitTypeDef Init; /*!< UART communication parameters */
  52. uint8_t *pTxBuffPtr; /*!< Pointer to UART Tx transfer Buffer */
  53. uint16_t TxXferSize; /*!< UART Tx Transfer size */
  54. __IO uint16_t TxXferCount; /*!< UART Tx Transfer Counter */
  55. uint8_t *pRxBuffPtr; /*!< Pointer to UART Rx transfer Buffer */
  56. uint16_t RxXferSize; /*!< UART Rx Transfer size */
  57. __IO uint16_t RxXferCount; /*!< UART Rx Transfer Counter */
  58. HAL_LockTypeDef Lock; /*!< Locking object */
  59. __IO HAL_UART_StateTypeDef gState; /*!< UART state information related to global Handle management
  60. and also related to Tx operations.
  61. This parameter can be a value of @ref HAL_UART_StateTypeDef */
  62. __IO HAL_UART_StateTypeDef RxState; /*!< UART state information related to Rx operations.
  63. This parameter can be a value of @ref HAL_UART_StateTypeDef */
  64. __IO uint32_t ErrorCode; /*!< UART Error code */
  65. uint32_t RxFlag;
  66. }UART_HandleTypeDef;
  67. typedef enum
  68. {
  69. UART_FIFO_TX_NOT_FULL,
  70. UART_FIFO_TX_EMPTY,
  71. UART_FIFO_RX_NOT_EMPTY,
  72. } HAL_UART_WaitFlagDef;
  73. #define UART0 ((USART_TypeDef *)UART0_BASE)
  74. #define UART1 ((USART_TypeDef *)UART1_BASE)
  75. #define UART2 ((USART_TypeDef *)UART2_BASE)
  76. #define UART3 ((USART_TypeDef *)UART3_BASE)
  77. #define UART4 ((USART_TypeDef *)UART4_BASE)
  78. #define UART5 ((USART_TypeDef *)UART5_BASE)
  79. #define UART_FIFO_FULL 32
  80. #define HAL_UART_ERROR_NONE 0x00000000U /*!< No error */
  81. #define HAL_UART_ERROR_FE 0x00000040U /*!< Frame error */
  82. #define HAL_UART_ERROR_PE 0x00000080U /*!< Parity error */
  83. #define HAL_UART_ERROR_ORE 0x00000100U /*!< Overrun error */
  84. #define UART_WORDLENGTH_5B ((uint32_t)UART_LC_DATAL_5BIT)
  85. #define UART_WORDLENGTH_6B ((uint32_t)UART_LC_DATAL_6BIT)
  86. #define UART_WORDLENGTH_7B ((uint32_t)UART_LC_DATAL_7BIT)
  87. #define UART_WORDLENGTH_8B ((uint32_t)UART_LC_DATAL_8BIT)
  88. #define UART_STOPBITS_1 0x00000000
  89. #define UART_STOPBITS_2 ((uint32_t)UART_LC_STOP)
  90. #define UART_PARITY_NONE 0x00000000
  91. #define UART_PARITY_EVEN ((uint32_t)UART_LC_PCE)
  92. #define UART_PARITY_ODD ((uint32_t)(UART_LC_PCE | UART_LC_PS))
  93. #define UART_HWCONTROL_NONE 0x00000000U
  94. #define UART_HWCONTROL_RTS ((uint32_t)UART_FC_AFCE)
  95. #define UART_HWCONTROL_CTS ((uint32_t)UART_FC_AFCE)
  96. #define UART_HWCONTROL_RTS_CTS ((uint32_t)UART_FC_AFCE)
  97. #define UART_MODE_RX ((uint32_t)UART_LC_RE)
  98. #define UART_MODE_TX ((uint32_t)UART_LC_TE)
  99. #define UART_MODE_TX_RX ((uint32_t)(UART_LC_RE | UART_LC_TE))
  100. #define UART_STATE_DISABLE 0x00000000U
  101. #define UART_STATE_ENABLE ((uint32_t)(UART_LC_RE | UART_LC_TE))
  102. #define __HAL_UART_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->LC |= (UART_LC_RE | UART_LC_TE))
  103. #define __HAL_UART_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->LC &= ~(UART_LC_RE | UART_LC_TE))
  104. #define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__, __OPERATING__) (__OPERATING__(__HANDLE__, __FLAG__))
  105. #define IS_UART_INSTANCE(INSTANCE) (((INSTANCE) == UART0) || \
  106. ((INSTANCE) == UART1) || \
  107. ((INSTANCE) == UART2) || \
  108. ((INSTANCE) == UART3) || \
  109. ((INSTANCE) == UART4) || \
  110. ((INSTANCE) == UART5))
  111. #define IS_UART_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_5B) || \
  112. ((LENGTH) == UART_WORDLENGTH_6B) || \
  113. ((LENGTH) == UART_WORDLENGTH_7B) || \
  114. ((LENGTH) == UART_WORDLENGTH_8B))
  115. #define IS_UART_BAUDRATE(BAUDRATE) (((BAUDRATE) == 2000000) || \
  116. ((BAUDRATE) == 1500000) || \
  117. ((BAUDRATE) == 1250000) || \
  118. ((BAUDRATE) == 1000000) || \
  119. ((BAUDRATE) == 921600) || \
  120. ((BAUDRATE) == 460800) || \
  121. ((BAUDRATE) == 230400) || \
  122. ((BAUDRATE) == 115200) || \
  123. ((BAUDRATE) == 57600) || \
  124. ((BAUDRATE) == 38400) || \
  125. ((BAUDRATE) == 19200) || \
  126. ((BAUDRATE) == 9600) || \
  127. ((BAUDRATE) == 4800) || \
  128. ((BAUDRATE) == 2400) || \
  129. ((BAUDRATE) == 1800) || \
  130. ((BAUDRATE) == 1200) || \
  131. ((BAUDRATE) == 600))
  132. #define IS_UART_STOPBITS(STOPBITS) (((STOPBITS) == UART_STOPBITS_1) || \
  133. ((STOPBITS) == UART_STOPBITS_2))
  134. #define IS_UART_PARITY(PARITY) (((PARITY) == UART_PARITY_NONE) || \
  135. ((PARITY) == UART_PARITY_EVEN) || \
  136. ((PARITY) == UART_PARITY_ODD))
  137. #define IS_UART_MODE(MODE) (((MODE) == UART_MODE_RX) || \
  138. ((MODE) == UART_MODE_TX) || \
  139. ((MODE) == UART_MODE_TX_RX))
  140. #define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL)\
  141. (((CONTROL) == UART_HWCONTROL_NONE) || \
  142. ((CONTROL) == UART_HWCONTROL_RTS) || \
  143. ((CONTROL) == UART_HWCONTROL_CTS) || \
  144. ((CONTROL) == UART_HWCONTROL_RTS_CTS))
  145. #define UART_RX_INT_FLAG (UART_INTS_OE | UART_INTS_PE | UART_INTS_FE |\
  146. UART_INTS_RL | UART_INTS_RTO | UART_INTS_BD)
  147. #define UART_RX_ERR_INT_FLAG (UART_INTS_BD | UART_INTS_FE | \
  148. UART_INTS_PE)
  149. #define UART_TX_INT_FLAG (UART_INTM_TL | UART_INTM_TEMPT)
  150. #define __HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->INTM &= ~ __INTERRUPT__)
  151. #define __HAL_UART_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->INTM |= __INTERRUPT__)
  152. #define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->INTS |= __FLAG__)
  153. HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart);
  154. HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart);
  155. HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
  156. HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
  157. HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
  158. /**
  159. * 以中断方式接收一定长度的数据.
  160. * 注意:pData指向的地址,空间长度必须大于等于32字节
  161. * Size大于0,则接收够Size长度的数据执行一次HAL_UART_RxCpltCallback(huart);
  162. * Sized等于0,则接收不定长的数据就执行一次HAL_UART_RxCpltCallback(huart);
  163. * 两种情况下,数据都存放在huart->pRxBuffPtr或者pData中,数据长度存放在huart->RxXferCount中
  164. */
  165. HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
  166. void HAL_UART_IRQHandler(UART_HandleTypeDef *huart);
  167. void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);
  168. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
  169. #endif