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