HAL_UART.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. /*
  2. ******************************************************************************
  3. * @file HAL_Uart.h
  4. * @version V1.0.0
  5. * @date 2020
  6. * @brief Header file of UART HAL module.
  7. ******************************************************************************
  8. */
  9. #ifndef __HAL_UART_H__
  10. #define __HAL_UART_H__
  11. #include "ACM32Fxx_HAL.h"
  12. /******************************************************************************/
  13. /* Peripheral Registers Bits Definition */
  14. /******************************************************************************/
  15. /**************** Bit definition for UART FR register ***********************/
  16. #define UART_FR_TXFE BIT7
  17. #define UART_FR_RXFF BIT6
  18. #define UART_FR_TXFF BIT5
  19. #define UART_FR_RXFE BIT4
  20. #define UART_FR_BUSY BIT3
  21. #define UART_FR_CTS BIT0
  22. /*************** Bit definition for UART LCRH register **********************/
  23. #define UART_LCRH_SPS BIT7
  24. #define UART_LCRH_WLEN (BIT6|BIT5)
  25. #define UART_LCRH_FEN BIT4
  26. #define UART_LCRH_STP2 BIT3
  27. #define UART_LCRH_EPS BIT2
  28. #define UART_LCRH_PEN BIT1
  29. #define UART_LCRH_BRK BIT0
  30. /**************** Bit definition for UART CR register ***********************/
  31. #define UART_CR_CTSEN BIT15
  32. #define UART_CR_RTSEN BIT14
  33. #define UART_CR_RTS BIT11
  34. #define UART_CR_RXE BIT9
  35. #define UART_CR_TXE BIT8
  36. #define UART_CR_UARTEN BIT0
  37. /*************** Bit definition for UART IFLS register **********************/
  38. #define UART_IFLS_RXIFLSEL (BIT3|BIT4|BIT5)
  39. #define UART_IFLS_TXIFLSEL (BIT0|BIT1|BIT2)
  40. /**************** Bit definition for UART IE register ***********************/
  41. #define UART_IE_OEI BIT10
  42. #define UART_IE_BEI BIT9
  43. #define UART_IE_PEI BIT8
  44. #define UART_IE_FEI BIT7
  45. #define UART_IE_RTI BIT6
  46. #define UART_IE_TXI BIT5
  47. #define UART_IE_RXI BIT4
  48. /**************** Bit definition for UART RIS register ***********************/
  49. #define UART_RIS_OEI BIT10
  50. #define UART_RIS_BEI BIT9
  51. #define UART_RIS_PEI BIT8
  52. #define UART_RIS_FEI BIT7
  53. #define UART_RIS_RTI BIT6
  54. #define UART_RIS_TXI BIT5
  55. #define UART_RIS_RXI BIT4
  56. /**************** Bit definition for UART ICR register ***********************/
  57. #define UART_ICR_OEI BIT10
  58. #define UART_ICR_BEI BIT9
  59. #define UART_ICR_PEI BIT8
  60. #define UART_ICR_FEI BIT7
  61. #define UART_ICR_RTI BIT6
  62. #define UART_ICR_TXI BIT5
  63. #define UART_ICR_RXI BIT4
  64. /***************** Bit definition for UART DMACR register ***********************/
  65. #define UART_DMACR_DMAONERR BIT2
  66. #define UART_DMACR_TXDMAE BIT1
  67. #define UART_DMACR_RXDMAE BIT0
  68. /***************** Bit definition for UART CR2 register ***********************/
  69. #define UART_CR2_TXOE_SEL BIT1
  70. #define UART_CR2_RX_SEL BIT0
  71. /** @defgroup UARTEx_Word_Length UARTEx Word Length
  72. * @{
  73. */
  74. #define UART_WORDLENGTH_5B (0x00000000U) /*!< 5-bit Word Length */
  75. #define UART_WORDLENGTH_6B (0x00000020U) /*!< 6-bit Word Length */
  76. #define UART_WORDLENGTH_7B (0x00000040U) /*!< 7-bit Word Length */
  77. #define UART_WORDLENGTH_8B (0x00000060U) /*!< 8-bit Word Length */
  78. /**
  79. * @}
  80. */
  81. /** @defgroup UART_Parity UART Parity
  82. * @{
  83. */
  84. #define UART_PARITY_NONE (0x00000000U) /*!< No parity */
  85. #define UART_PARITY_EVEN (0x00000006U) /*!< Even parity */
  86. #define UART_PARITY_ODD (0x00000002U) /*!< Odd parity */
  87. #define UART_PARITY_0 (0x00000086U) /*!< 0 parity */
  88. #define UART_PARITY_1 (0x00000082U) /*!< 1 parity */
  89. /**
  90. * @}
  91. */
  92. /** @defgroup UART_Stop_Bits UART Number of Stop Bits
  93. * @{
  94. */
  95. #define UART_STOPBITS_1 (0x00000000U) /*!< UART frame with 1 stop bit */
  96. #define UART_STOPBITS_2 (0x00008000U) /*!< UART frame with 2 stop bits */
  97. /**
  98. * @}
  99. */
  100. /** @defgroup UART_Hardware_Flow_Control UART Hardware Flow Control
  101. * @{
  102. */
  103. #define UART_HWCONTROL_NONE (0x00000000U) /*!< No hardware control */
  104. #define UART_HWCONTROL_CTS (0x00008000U) /*!< Clear To Send */
  105. #define UART_HWCONTROL_RTS (0x00004000U) /*!< Request To Send */
  106. #define UART_HWCONTROL_CTS_RTS (UART_HWCONTROL_CTS | UART_HWCONTROL_RTS) /*!< Request and Clear To Send */
  107. /**
  108. * @}
  109. */
  110. /** @defgroup UART_Mode UART Transfer Mode
  111. * @{
  112. */
  113. #define UART_MODE_RX (0x00000200) /*!< RX mode */
  114. #define UART_MODE_TX (0x00000100) /*!< TX mode */
  115. #define UART_MODE_TX_RX (0x00000300) /*!< RX and TX mode */
  116. #define UART_MODE_TX_RX_DEBUG (0x10000300) /*!< RX¡¢TX mode and Debug use this uart */
  117. #define UART_MODE_HALF_DUPLEX (0x20000300) /*!< Single half duplex */
  118. /**
  119. * @}
  120. */
  121. /** @defgroup FIFO interrupt Config
  122. * @{
  123. */
  124. #define UART_TX_FIFO_1_16 (0x00000005) /*!< Transfer 1 Data */
  125. #define UART_TX_FIFO_1_8 (0x00000000) /*!< Transfer 2 Data */
  126. #define UART_TX_FIFO_1_4 (0x00000001) /*!< Transfer 4 Data */
  127. #define UART_TX_FIFO_1_2 (0x00000002) /*!< Transfer 8 Data */
  128. #define UART_TX_FIFO_3_4 (0x00000003) /*!< Transfer 12 Data */
  129. #define UART_TX_FIFO_7_8 (0x00000004) /*!< Transfer 14 Data */
  130. #define UART_RX_FIFO_1_16 (0x00000028) /*!< Receive 1 Data */
  131. #define UART_RX_FIFO_1_8 (0x00000000) /*!< Receive 2 Data */
  132. #define UART_RX_FIFO_1_4 (0x00000008) /*!< Receive 4 Data */
  133. #define UART_RX_FIFO_1_2 (0x00000010) /*!< Receive 8 Data */
  134. #define UART_RX_FIFO_3_4 (0x00000018) /*!< Receive 12 Data */
  135. #define UART_RX_FIFO_7_8 (0x00000020) /*!< Receive 14 Data */
  136. /**
  137. * @}
  138. */
  139. /** @defgroup UART_Error_Code UART Error Code
  140. * @{
  141. */
  142. #define HAL_UART_ERROR_NONE 0x00000000U /*!< No error */
  143. #define HAL_UART_ERROR_PE 0x00000001U /*!< Parity error */
  144. #define HAL_UART_ERROR_NE 0x00000002U /*!< Noise error */
  145. #define HAL_UART_ERROR_FE 0x00000004U /*!< Frame error */
  146. #define HAL_UART_ERROR_ORE 0x00000008U /*!< Overrun error */
  147. #define HAL_UART_ERROR_DMA 0x00000010U /*!< DMA transfer error */
  148. /**
  149. * @}
  150. */
  151. /*
  152. * @brief UART Init Structure definition
  153. */
  154. typedef struct
  155. {
  156. uint32_t BaudRate; /*!< This member configures the UART communication baud rate. */
  157. uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame.
  158. This parameter can be a value of @ref UARTEx_Word_Length. */
  159. uint32_t StopBits; /*!< Specifies the number of stop bits transmitted.
  160. This parameter can be a value of @ref UART_Stop_Bits. */
  161. uint32_t Parity; /*!< Specifies the parity mode.
  162. This parameter can be a value of @ref UART_Parity. */
  163. uint32_t Mode; /*!< Specifies whether the Receive or Transmit mode is enabled or disabled.
  164. This parameter can be a value of @ref UART_Mode. */
  165. uint32_t HwFlowCtl; /*!< Specifies whether the hardware flow control mode is enabled or disabled.
  166. This parameter can be a value of @ref UART_Hardware_Flow_Control. */
  167. }UART_InitTypeDef;
  168. /*
  169. * @brief UART handle Structure definition
  170. */
  171. typedef struct
  172. {
  173. UART_TypeDef *Instance; /*!< UART registers base address */
  174. UART_InitTypeDef Init; /*!< UART communication parameters */
  175. uint32_t lu32_TxSize; /*!< UART Transmit parameters in interrupt */
  176. __IO uint32_t lu32_TxCount;
  177. uint8_t *lu8_TxData;
  178. uint32_t lu32_RxSize; /*!< UART Receive parameters in interrupt */
  179. __IO uint32_t lu32_RxCount;
  180. uint32_t lu32_fifo_level_minus1;
  181. uint8_t *lu8_RxData;
  182. __IO uint8_t lu8_TxBusy;
  183. __IO uint8_t lu8_RxBusy;
  184. DMA_HandleTypeDef *HDMA_Tx; /*!< UART Tx DMA handle parameters */
  185. DMA_HandleTypeDef *HDMA_Rx; /*!< UART Rx DMA handle parameters */
  186. __IO uint32_t ErrorCode; /*!<UART Error Code */
  187. }UART_HandleTypeDef;
  188. /** @defgroup GPIO Private Macros
  189. * @{
  190. */
  191. #define IS_UART_ALL_INSTANCE(INSTANCE) (((INSTANCE) == UART1) || \
  192. ((INSTANCE) == UART2) || \
  193. ((INSTANCE) == UART3) || \
  194. ((INSTANCE) == UART4))
  195. #define IS_UART_WORDLENGTH(__WORDLENGTH__) (((__WORDLENGTH__) == UART_WORDLENGTH_5B) || \
  196. ((__WORDLENGTH__) == UART_WORDLENGTH_6B) || \
  197. ((__WORDLENGTH__) == UART_WORDLENGTH_7B) || \
  198. ((__WORDLENGTH__) == UART_WORDLENGTH_8B))
  199. #define IS_UART_STOPBITS(__STOPBITS__) (((__STOPBITS__) == UART_STOPBITS_1) || \
  200. ((__STOPBITS__) == UART_STOPBITS_2))
  201. #define IS_UART_PARITY(__PARITY__) (((__PARITY__) == UART_PARITY_NONE) || \
  202. ((__PARITY__) == UART_PARITY_EVEN) || \
  203. ((__PARITY__) == UART_PARITY_ODD))
  204. #define IS_UART_MODE(__MODE__) (((__MODE__) == UART_MODE_RX) || \
  205. ((__MODE__) == UART_MODE_TX) || \
  206. ((__MODE__) == UART_MODE_TX_RX) || \
  207. ((__MODE__) == UART_MODE_TX_RX_DEBUG) || \
  208. ((__MODE__) == UART_MODE_HALF_DUPLEX))
  209. #define IS_UART_HARDWARE_FLOW_CONTROL(__CONTROL__) (((__CONTROL__) == UART_HWCONTROL_NONE) || \
  210. ((__CONTROL__) == UART_HWCONTROL_RTS) || \
  211. ((__CONTROL__) == UART_HWCONTROL_CTS) || \
  212. ((__CONTROL__) == UART_HWCONTROL_CTS_RTS))
  213. /**
  214. * @}
  215. */
  216. /* HAL_UART_IRQHandler */
  217. void HAL_UART_IRQHandler(UART_HandleTypeDef *huart);
  218. /* HAL_UART_MspInit */
  219. void HAL_UART_MspInit(UART_HandleTypeDef *huart);
  220. /* HAL_UART_Init */
  221. HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart);
  222. /* HAL_UART_DeInit */
  223. HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart);
  224. /* HAL_UART_GetState */
  225. HAL_StatusTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart);
  226. /* HAL_UART_GetError*/
  227. uint32_t HAL_UART_GetError(UART_HandleTypeDef *huart);
  228. /* HAL_UART_Abort*/
  229. HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart);
  230. /* HAL_UART_DMAPause */
  231. HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart);
  232. /* HAL_UART_DMAResume */
  233. HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart);
  234. /* HAL_UART_Transmit */
  235. HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *fu8_Data, uint32_t fu32_Size, uint32_t fu32_Timeout);
  236. /* HAL_UART_Receive */
  237. HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *fu8_Data, uint32_t fu32_Size, uint32_t fu32_Timeout);
  238. /* HAL_UART_Transmit_IT */
  239. HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *fu8_Data, uint32_t fu32_Size);
  240. /* HAL_UART_Receive_IT */
  241. HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *fu8_Data, uint32_t fu32_Size);
  242. /* HAL_UART_Transmit_DMA */
  243. HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *fu8_Data, uint32_t fu32_Size);
  244. /* HAL_UART_Receive_DMA */
  245. HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *fu8_Data, uint32_t fu32_Size);
  246. #endif