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