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