150 #ifdef HAL_USART_MODULE_ENABLED 157 #define USART_DUMMY_DATA ((uint16_t) 0xFFFF) 158 #define USART_TEACK_REACK_TIMEOUT 1000U 159 #if defined(USART_CR1_FIFOEN) 160 #define USART_CR1_FIELDS ((uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | \ 161 USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8 | \ 164 #define USART_CR2_FIELDS ((uint32_t)(USART_CR2_CPHA | USART_CR2_CPOL | USART_CR2_CLKEN | \ 165 USART_CR2_LBCL | USART_CR2_STOP | USART_CR2_SLVEN | \ 168 #define USART_CR3_FIELDS ((uint32_t)(USART_CR3_TXFTCFG | USART_CR3_RXFTCFG )) 170 #define USART_CR1_FIELDS ((uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | \ 171 USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8)) 172 #define USART_CR2_FIELDS ((uint32_t)(USART_CR2_CPHA | USART_CR2_CPOL | \ 173 USART_CR2_CLKEN | USART_CR2_LBCL | USART_CR2_STOP)) 176 #define USART_BRR_MIN 0x10U 177 #define USART_BRR_MAX 0xFFFFU 188 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 201 uint32_t Tickstart, uint32_t Timeout);
206 #if defined(USART_CR1_FIFOEN) 213 #if defined(USART_CR1_FIFOEN) 302 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 321 __HAL_USART_DISABLE(husart);
332 husart->
Instance->CR2 &= ~USART_CR2_LINEN;
333 husart->
Instance->CR3 &= ~(USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN);
336 __HAL_USART_ENABLE(husart);
364 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 376 husart->
ErrorCode = HAL_USART_ERROR_NONE;
415 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 439 HAL_StatusTypeDef status =
HAL_OK;
441 if (pCallback == NULL)
444 husart->
ErrorCode |= HAL_USART_ERROR_INVALID_CALLBACK;
483 #if defined(USART_CR1_FIFOEN) 503 husart->
ErrorCode |= HAL_USART_ERROR_INVALID_CALLBACK;
524 husart->
ErrorCode |= HAL_USART_ERROR_INVALID_CALLBACK;
534 husart->
ErrorCode |= HAL_USART_ERROR_INVALID_CALLBACK;
567 HAL_StatusTypeDef status =
HAL_OK;
604 #if defined(USART_CR1_FIFOEN) 624 husart->
ErrorCode |= HAL_USART_ERROR_INVALID_CALLBACK;
645 husart->
ErrorCode |= HAL_USART_ERROR_INVALID_CALLBACK;
655 husart->
ErrorCode |= HAL_USART_ERROR_INVALID_CALLBACK;
760 uint8_t *ptxdata8bits;
761 uint16_t *ptxdata16bits;
766 if ((pTxData == NULL) || (Size == 0U))
774 husart->
ErrorCode = HAL_USART_ERROR_NONE;
787 ptxdata16bits = (uint16_t *) pTxData;
791 ptxdata8bits = pTxData;
792 ptxdata16bits = NULL;
802 if (ptxdata8bits == NULL)
804 husart->
Instance->TDR = (uint16_t)(*ptxdata16bits & 0x01FFU);
809 husart->
Instance->TDR = (uint8_t)(*ptxdata8bits & 0xFFU);
822 __HAL_USART_CLEAR_FLAG(husart, USART_CLEAR_TCF);
825 __HAL_USART_CLEAR_OREFLAG(husart);
826 __HAL_USART_SEND_REQ(husart, USART_RXDATA_FLUSH_REQUEST);
827 __HAL_USART_SEND_REQ(husart, USART_TXDATA_FLUSH_REQUEST);
854 uint8_t *prxdata8bits;
855 uint16_t *prxdata16bits;
861 if ((pRxData == NULL) || (Size == 0U))
869 husart->
ErrorCode = HAL_USART_ERROR_NONE;
879 USART_MASK_COMPUTATION(husart);
880 uhMask = husart->
Mask;
886 prxdata16bits = (uint16_t *) pRxData;
890 prxdata8bits = pRxData;
891 prxdata16bits = NULL;
897 #if defined(USART_CR2_SLVEN) 898 if (husart->
SlaveMode == USART_SLAVEMODE_DISABLE)
909 husart->
Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x0FF);
918 if (prxdata8bits == NULL)
920 *prxdata16bits = (uint16_t)(husart->
Instance->RDR & uhMask);
925 *prxdata8bits = (uint8_t)(husart->
Instance->RDR & (uint8_t)(uhMask & 0xFFU));
933 #if defined(USART_CR2_SLVEN) 935 if (husart->
SlaveMode == USART_SLAVEMODE_ENABLE)
937 __HAL_USART_CLEAR_UDRFLAG(husart);
938 __HAL_USART_SEND_REQ(husart, USART_TXDATA_FLUSH_REQUEST);
966 uint16_t Size, uint32_t Timeout)
968 uint8_t *prxdata8bits;
969 uint16_t *prxdata16bits;
970 uint8_t *ptxdata8bits;
971 uint16_t *ptxdata16bits;
973 uint16_t rxdatacount;
978 if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U))
986 husart->
ErrorCode = HAL_USART_ERROR_NONE;
998 USART_MASK_COMPUTATION(husart);
999 uhMask = husart->
Mask;
1004 prxdata8bits = NULL;
1005 ptxdata8bits = NULL;
1006 ptxdata16bits = (uint16_t *) pTxData;
1007 prxdata16bits = (uint16_t *) pRxData;
1011 prxdata8bits = pRxData;
1012 ptxdata8bits = pTxData;
1013 ptxdata16bits = NULL;
1014 prxdata16bits = NULL;
1017 #if defined(USART_CR2_SLVEN) 1028 if (ptxdata8bits == NULL)
1030 husart->
Instance->TDR = (uint16_t)(*ptxdata16bits & uhMask);
1035 husart->
Instance->TDR = (uint8_t)(*ptxdata8bits & (uint8_t)(uhMask & 0xFFU));
1045 while ((husart->
TxXferCount > 0U) || (rxdatacount > 0U))
1054 if (ptxdata8bits == NULL)
1056 husart->
Instance->TDR = (uint16_t)(*ptxdata16bits & uhMask);
1061 husart->
Instance->TDR = (uint8_t)(*ptxdata8bits & (uint8_t)(uhMask & 0xFFU));
1076 if (prxdata8bits == NULL)
1078 *prxdata16bits = (uint16_t)(husart->
Instance->RDR & uhMask);
1083 *prxdata8bits = (uint8_t)(husart->
Instance->RDR & (uint8_t)(uhMask & 0xFFU));
1117 if ((pTxData == NULL) || (Size == 0U))
1128 husart->
TxISR = NULL;
1130 husart->
ErrorCode = HAL_USART_ERROR_NONE;
1139 #if defined(USART_CR1_FIFOEN) 1141 if (husart->
FifoMode == USART_FIFOMODE_ENABLE)
1157 __HAL_USART_ENABLE_IT(husart, USART_IT_TXFT);
1176 __HAL_USART_ENABLE_IT(husart, USART_IT_TXE);
1197 #if defined(USART_CR1_FIFOEN) 1198 uint16_t nb_dummy_data;
1203 if ((pRxData == NULL) || (Size == 0U))
1214 husart->
RxISR = NULL;
1216 USART_MASK_COMPUTATION(husart);
1218 husart->
ErrorCode = HAL_USART_ERROR_NONE;
1222 SET_BIT(husart->
Instance->CR3, USART_CR3_EIE);
1224 #if defined(USART_CR1_FIFOEN) 1242 SET_BIT(husart->
Instance->CR1, USART_CR1_PEIE);
1243 SET_BIT(husart->
Instance->CR3, USART_CR3_RXFTIE);
1262 #if defined(USART_CR1_FIFOEN) 1263 SET_BIT(husart->
Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE_RXFNEIE);
1265 SET_BIT(husart->
Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE);
1269 #if defined(USART_CR2_SLVEN) 1270 if (husart->
SlaveMode == USART_SLAVEMODE_DISABLE)
1277 #if defined(USART_CR1_FIFOEN) 1280 for (nb_dummy_data = husart->
NbRxDataToProcess ; nb_dummy_data > 0U ; nb_dummy_data--)
1282 husart->
Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF);
1288 husart->
Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF);
1314 if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U))
1330 USART_MASK_COMPUTATION(husart);
1332 husart->
ErrorCode = HAL_USART_ERROR_NONE;
1335 #if defined(USART_CR1_FIFOEN) 1355 SET_BIT(husart->
Instance->CR3, USART_CR3_EIE);
1358 SET_BIT(husart->
Instance->CR1, USART_CR1_PEIE);
1361 SET_BIT(husart->
Instance->CR3, (USART_CR3_TXFTIE | USART_CR3_RXFTIE));
1381 SET_BIT(husart->
Instance->CR3, USART_CR3_EIE);
1384 #if defined(USART_CR1_FIFOEN) 1385 SET_BIT(husart->
Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE_RXFNEIE);
1387 SET_BIT(husart->
Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE);
1391 #if defined(USART_CR1_FIFOEN) 1392 SET_BIT(husart->
Instance->CR1, USART_CR1_TXEIE_TXFNFIE);
1394 SET_BIT(husart->
Instance->CR1, USART_CR1_TXEIE);
1415 HAL_StatusTypeDef status =
HAL_OK;
1420 if ((pTxData == NULL) || (Size == 0U))
1432 husart->
ErrorCode = HAL_USART_ERROR_NONE;
1435 if (husart->
hdmatx != NULL)
1447 tmp = (uint32_t *)&pTxData;
1454 __HAL_USART_CLEAR_FLAG(husart, USART_CLEAR_TCF);
1461 SET_BIT(husart->
Instance->CR3, USART_CR3_DMAT);
1468 husart->
ErrorCode = HAL_USART_ERROR_DMA;
1497 HAL_StatusTypeDef status =
HAL_OK;
1498 uint32_t *tmp = (uint32_t *)&pRxData;
1503 if ((pRxData == NULL) || (Size == 0U))
1516 husart->
ErrorCode = HAL_USART_ERROR_NONE;
1519 if (husart->
hdmarx != NULL)
1534 #if defined(USART_CR2_SLVEN) 1535 if ((status ==
HAL_OK) &&
1536 (husart->
SlaveMode == USART_SLAVEMODE_DISABLE))
1544 if (husart->
hdmatx != NULL)
1559 SET_BIT(husart->
Instance->CR1, USART_CR1_PEIE);
1562 SET_BIT(husart->
Instance->CR3, USART_CR3_EIE);
1566 SET_BIT(husart->
Instance->CR3, USART_CR3_DMAR);
1570 SET_BIT(husart->
Instance->CR3, USART_CR3_DMAT);
1576 if (husart->
hdmarx != NULL)
1585 husart->
ErrorCode = HAL_USART_ERROR_DMA;
1614 HAL_StatusTypeDef status;
1619 if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U))
1632 husart->
ErrorCode = HAL_USART_ERROR_NONE;
1635 if ((husart->
hdmarx != NULL) && (husart->
hdmatx != NULL))
1656 tmp = (uint32_t *)&pRxData;
1662 tmp = (uint32_t *)&pTxData;
1677 SET_BIT(husart->
Instance->CR1, USART_CR1_PEIE);
1680 SET_BIT(husart->
Instance->CR3, USART_CR3_EIE);
1683 __HAL_USART_CLEAR_FLAG(husart, USART_CLEAR_TCF);
1687 SET_BIT(husart->
Instance->CR3, USART_CR3_DMAR);
1691 SET_BIT(husart->
Instance->CR3, USART_CR3_DMAT);
1697 if (husart->
hdmarx != NULL)
1706 husart->
ErrorCode = HAL_USART_ERROR_DMA;
1735 if ((HAL_IS_BIT_SET(husart->
Instance->CR3, USART_CR3_DMAT)) &&
1744 if (HAL_IS_BIT_SET(husart->
Instance->CR3, USART_CR3_DMAT))
1749 if (HAL_IS_BIT_SET(husart->
Instance->CR3, USART_CR3_DMAR))
1785 SET_BIT(husart->
Instance->CR3, USART_CR3_DMAT);
1791 __HAL_USART_CLEAR_FLAG(husart, USART_CLEAR_OREF);
1794 SET_BIT(husart->
Instance->CR1, USART_CR1_PEIE);
1795 SET_BIT(husart->
Instance->CR3, USART_CR3_EIE);
1798 SET_BIT(husart->
Instance->CR3, USART_CR3_DMAR);
1801 SET_BIT(husart->
Instance->CR3, USART_CR3_DMAT);
1833 if (husart->
hdmatx != NULL)
1840 husart->
ErrorCode = HAL_USART_ERROR_DMA;
1847 if (husart->
hdmarx != NULL)
1854 husart->
ErrorCode = HAL_USART_ERROR_DMA;
1881 #if defined(USART_CR1_FIFOEN) 1883 CLEAR_BIT(husart->
Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE |
1885 CLEAR_BIT(husart->
Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE | USART_CR3_TXFTIE));
1887 CLEAR_BIT(husart->
Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE));
1892 if (HAL_IS_BIT_SET(husart->
Instance->CR3, USART_CR3_DMAT))
1897 if (husart->
hdmatx != NULL)
1908 husart->
ErrorCode = HAL_USART_ERROR_DMA;
1917 if (HAL_IS_BIT_SET(husart->
Instance->CR3, USART_CR3_DMAR))
1922 if (husart->
hdmarx != NULL)
1933 husart->
ErrorCode = HAL_USART_ERROR_DMA;
1946 __HAL_USART_CLEAR_FLAG(husart, USART_CLEAR_OREF | USART_CLEAR_NEF | USART_CLEAR_PEF | USART_CLEAR_FEF);
1948 #if defined(USART_CR1_FIFOEN) 1950 if (husart->
FifoMode == USART_FIFOMODE_ENABLE)
1952 __HAL_USART_SEND_REQ(husart, USART_TXDATA_FLUSH_REQUEST);
1957 __HAL_USART_SEND_REQ(husart, USART_RXDATA_FLUSH_REQUEST);
1963 husart->
ErrorCode = HAL_USART_ERROR_NONE;
1984 uint32_t abortcplt = 1U;
1986 #if defined(USART_CR1_FIFOEN) 1988 CLEAR_BIT(husart->
Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE |
1990 CLEAR_BIT(husart->
Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE | USART_CR3_TXFTIE));
1992 CLEAR_BIT(husart->
Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE));
1999 if (husart->
hdmatx != NULL)
2003 if (HAL_IS_BIT_SET(husart->
Instance->CR3, USART_CR3_DMAT))
2013 if (husart->
hdmarx != NULL)
2017 if (HAL_IS_BIT_SET(husart->
Instance->CR3, USART_CR3_DMAR))
2028 if (HAL_IS_BIT_SET(husart->
Instance->CR3, USART_CR3_DMAT))
2034 if (husart->
hdmatx != NULL)
2052 if (HAL_IS_BIT_SET(husart->
Instance->CR3, USART_CR3_DMAR))
2057 if (husart->
hdmarx != NULL)
2076 if (abortcplt == 1U)
2083 husart->
ErrorCode = HAL_USART_ERROR_NONE;
2086 __HAL_USART_CLEAR_FLAG(husart, USART_CLEAR_OREF | USART_CLEAR_NEF | USART_CLEAR_PEF | USART_CLEAR_FEF);
2088 #if defined(USART_CR1_FIFOEN) 2090 if (husart->
FifoMode == USART_FIFOMODE_ENABLE)
2092 __HAL_USART_SEND_REQ(husart, USART_TXDATA_FLUSH_REQUEST);
2097 __HAL_USART_SEND_REQ(husart, USART_RXDATA_FLUSH_REQUEST);
2103 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2122 uint32_t isrflags = READ_REG(husart->
Instance->ISR);
2123 uint32_t cr1its = READ_REG(husart->
Instance->CR1);
2124 uint32_t cr3its = READ_REG(husart->
Instance->CR3);
2126 uint32_t errorflags;
2130 #if defined(USART_CR2_SLVEN) 2131 errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE | USART_ISR_UDR));
2133 errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE));
2135 if (errorflags == 0U)
2138 #if defined(USART_CR1_FIFOEN) 2139 if (((isrflags & USART_ISR_RXNE_RXFNE) != 0U)
2140 && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U)
2141 || ((cr3its & USART_CR3_RXFTIE) != 0U)))
2143 if (((isrflags & USART_ISR_RXNE) != 0U)
2144 && ((cr1its & USART_CR1_RXNEIE) != 0U))
2147 if (husart->
RxISR != NULL)
2149 husart->
RxISR(husart);
2156 #if defined(USART_CR1_FIFOEN) 2157 if ((errorflags != 0U)
2158 && (((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != 0U)
2159 || ((cr1its & (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE)) != 0U)))
2161 if ((errorflags != 0U)
2162 && (((cr3its & USART_CR3_EIE) != 0U)
2163 || ((cr1its & (USART_CR1_RXNEIE | USART_CR1_PEIE)) != 0U)))
2167 if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U))
2169 __HAL_USART_CLEAR_IT(husart, USART_CLEAR_PEF);
2171 husart->
ErrorCode |= HAL_USART_ERROR_PE;
2175 if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
2177 __HAL_USART_CLEAR_IT(husart, USART_CLEAR_FEF);
2179 husart->
ErrorCode |= HAL_USART_ERROR_FE;
2183 if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
2185 __HAL_USART_CLEAR_IT(husart, USART_CLEAR_NEF);
2187 husart->
ErrorCode |= HAL_USART_ERROR_NE;
2191 #if defined(USART_CR1_FIFOEN) 2192 if (((isrflags & USART_ISR_ORE) != 0U)
2193 && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U) ||
2194 ((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != 0U)))
2196 if (((isrflags & USART_ISR_ORE) != 0U)
2197 && (((cr1its & USART_CR1_RXNEIE) != 0U) ||
2198 ((cr3its & USART_CR3_EIE) != 0U)))
2201 __HAL_USART_CLEAR_IT(husart, USART_CLEAR_OREF);
2203 husart->
ErrorCode |= HAL_USART_ERROR_ORE;
2206 #if defined(USART_CR2_SLVEN) 2208 if (((isrflags & USART_ISR_UDR) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
2213 __HAL_USART_CLEAR_UDRFLAG(husart);
2218 __HAL_USART_CLEAR_UDRFLAG(husart);
2219 husart->
ErrorCode |= HAL_USART_ERROR_UDR;
2225 if (husart->
ErrorCode != HAL_USART_ERROR_NONE)
2228 #if defined(USART_CR1_FIFOEN) 2229 if (((isrflags & USART_ISR_RXNE_RXFNE) != 0U)
2230 && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U)
2231 || ((cr3its & USART_CR3_RXFTIE) != 0U)))
2233 if (((isrflags & USART_ISR_RXNE) != 0U)
2234 && ((cr1its & USART_CR1_RXNEIE) != 0U))
2237 if (husart->
RxISR != NULL)
2239 husart->
RxISR(husart);
2245 errorcode = husart->
ErrorCode & HAL_USART_ERROR_ORE;
2246 if ((HAL_IS_BIT_SET(husart->
Instance->CR3, USART_CR3_DMAR)) ||
2255 if (HAL_IS_BIT_SET(husart->
Instance->CR3, USART_CR3_DMAR))
2260 if (husart->
hdmatx != NULL)
2271 if (husart->
hdmarx != NULL)
2287 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2299 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2312 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2319 husart->
ErrorCode = HAL_USART_ERROR_NONE;
2328 #if defined(USART_CR1_FIFOEN) 2329 if (((isrflags & USART_ISR_TXE_TXFNF) != 0U)
2330 && (((cr1its & USART_CR1_TXEIE_TXFNFIE) != 0U)
2331 || ((cr3its & USART_CR3_TXFTIE) != 0U)))
2333 if (((isrflags & USART_ISR_TXE) != 0U)
2334 && ((cr1its & USART_CR1_TXEIE) != 0U))
2337 if (husart->
TxISR != NULL)
2339 husart->
TxISR(husart);
2345 if (((isrflags & USART_ISR_TC) != 0U) && ((cr1its & USART_CR1_TCIE) != 0U))
2351 #if defined(USART_CR1_FIFOEN) 2353 if (((isrflags & USART_ISR_TXFE) != 0U) && ((cr1its & USART_CR1_TXFEIE) != 0U))
2355 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2366 if (((isrflags & USART_ISR_RXFF) != 0U) && ((cr1its & USART_CR1_RXFFIE) != 0U))
2368 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2514 return husart->
State;
2545 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2556 #if defined(USART_CR1_FIFOEN) 2570 #if defined(USART_CR1_FIFOEN) 2572 CLEAR_BIT(husart->
Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_TXEIE_TXFNFIE |
2574 CLEAR_BIT(husart->
Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE | USART_CR3_TXFTIE));
2577 CLEAR_BIT(husart->
Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE));
2595 if (HAL_IS_BIT_CLR(hdma->
Instance->CCR, DMA_CCR_CIRC))
2606 __HAL_USART_ENABLE_IT(husart, USART_IT_TC);
2614 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2634 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2653 if (HAL_IS_BIT_CLR(hdma->
Instance->CCR, DMA_CCR_CIRC))
2670 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2681 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2696 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2707 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2727 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2749 husart->
ErrorCode |= HAL_USART_ERROR_DMA;
2752 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2773 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2797 if (husart->
hdmarx != NULL)
2810 husart->
ErrorCode = HAL_USART_ERROR_NONE;
2813 __HAL_USART_CLEAR_FLAG(husart, USART_CLEAR_OREF | USART_CLEAR_NEF | USART_CLEAR_PEF | USART_CLEAR_FEF);
2819 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2845 if (husart->
hdmatx != NULL)
2858 husart->
ErrorCode = HAL_USART_ERROR_NONE;
2861 __HAL_USART_CLEAR_FLAG(husart, USART_CLEAR_OREF | USART_CLEAR_NEF | USART_CLEAR_PEF | USART_CLEAR_FEF);
2867 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 2887 uint32_t Tickstart, uint32_t Timeout)
2890 while ((__HAL_USART_GET_FLAG(husart, Flag) ? SET : RESET) == Status)
2893 if (Timeout != HAL_MAX_DELAY)
2895 if (((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
2918 HAL_StatusTypeDef ret =
HAL_OK;
2920 uint32_t usartdiv = 0x00000000;
2931 #if defined(USART_PRESC_PRESCALER) 2951 tmpreg = (uint32_t)(USART_CLOCK_ENABLE);
2957 #if defined(USART_PRESC_PRESCALER) 2966 USART_GETCLOCKSOURCE(husart, clocksource);
2968 switch (clocksource)
2971 #if defined(USART_PRESC_PRESCALER) 2978 #if defined(USART_PRESC_PRESCALER) 2985 #if defined(USART_PRESC_PRESCALER) 2988 usartdiv = (uint32_t)(USART_DIV_SAMPLING8(HSI_VALUE, husart->
Init.
BaudRate));
2992 #if defined(USART_PRESC_PRESCALER) 2999 #if defined(USART_PRESC_PRESCALER) 3002 usartdiv = (uint32_t)(USART_DIV_SAMPLING8(LSE_VALUE, husart->
Init.
BaudRate));
3011 if ((usartdiv >= USART_BRR_MIN) && (usartdiv <= USART_BRR_MAX))
3013 brrtemp = (uint16_t)(usartdiv & 0xFFF0U);
3014 brrtemp |= (uint16_t)((usartdiv & (uint16_t)0x000FU) >> 1U);
3022 #if defined(USART_CR1_FIFOEN) 3029 husart->
RxISR = NULL;
3030 husart->
TxISR = NULL;
3045 husart->
ErrorCode = HAL_USART_ERROR_NONE;
3051 if ((husart->
Instance->CR1 & USART_CR1_TE) == USART_CR1_TE)
3061 if ((husart->
Instance->CR1 & USART_CR1_RE) == USART_CR1_RE)
3101 __HAL_USART_DISABLE_IT(husart, USART_IT_TXE);
3104 __HAL_USART_ENABLE_IT(husart, USART_IT_TC);
3136 __HAL_USART_DISABLE_IT(husart, USART_IT_TXE);
3139 __HAL_USART_ENABLE_IT(husart, USART_IT_TC);
3144 husart->
Instance->TDR = (uint16_t)(*tmp & 0x01FFU);
3151 #if defined(USART_CR1_FIFOEN) 3165 uint16_t nb_tx_data;
3176 __HAL_USART_DISABLE_IT(husart, USART_IT_TXFT);
3179 __HAL_USART_ENABLE_IT(husart, USART_IT_TC);
3183 else if (__HAL_USART_GET_FLAG(husart, USART_FLAG_TXFNF) == SET)
3211 uint16_t nb_tx_data;
3222 __HAL_USART_DISABLE_IT(husart, USART_IT_TXFT);
3225 __HAL_USART_ENABLE_IT(husart, USART_IT_TC);
3229 else if (__HAL_USART_GET_FLAG(husart, USART_FLAG_TXFNF) == SET)
3232 husart->
Instance->TDR = (uint16_t)(*tmp & 0x01FFU);
3254 __HAL_USART_DISABLE_IT(husart, USART_IT_TC);
3257 __HAL_USART_DISABLE_IT(husart, USART_IT_ERR);
3260 husart->
TxISR = NULL;
3265 __HAL_USART_CLEAR_OREFLAG(husart);
3266 __HAL_USART_SEND_REQ(husart, USART_RXDATA_FLUSH_REQUEST);
3271 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 3284 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 3311 uint16_t txdatacount;
3312 uint16_t uhMask = husart->
Mask;
3313 #if defined(USART_CR1_FIFOEN) 3327 #if defined(USART_CR1_FIFOEN) 3337 husart->
RxISR = NULL;
3339 #if defined(USART_CR1_FIFOEN) 3341 txftie = READ_BIT(husart->
Instance->CR3, USART_CR3_TXFTIE);
3349 #if defined(USART_CR2_SLVEN) 3351 if (husart->
SlaveMode == USART_SLAVEMODE_ENABLE)
3353 __HAL_USART_CLEAR_UDRFLAG(husart);
3354 __HAL_USART_SEND_REQ(husart, USART_TXDATA_FLUSH_REQUEST);
3361 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 3369 #if defined(USART_CR1_FIFOEN) 3370 else if ((READ_BIT(husart->
Instance->CR1, USART_CR1_TCIE) != USART_CR1_TCIE) &&
3371 (txftie != USART_CR3_TXFTIE) &&
3372 (txdatacount == 0U))
3374 else if ((READ_BIT(husart->
Instance->CR1, USART_CR1_TCIE) != USART_CR1_TCIE) &&
3375 (txdatacount == 0U))
3381 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 3394 #if defined(USART_CR2_SLVEN) 3396 (husart->
SlaveMode == USART_SLAVEMODE_DISABLE))
3402 husart->
Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF);
3423 uint16_t txdatacount;
3425 uint16_t uhMask = husart->
Mask;
3426 #if defined(USART_CR1_FIFOEN) 3434 *tmp = (uint16_t)(husart->
Instance->RDR & uhMask);
3441 #if defined(USART_CR1_FIFOEN) 3451 husart->
RxISR = NULL;
3453 #if defined(USART_CR1_FIFOEN) 3455 txftie = READ_BIT(husart->
Instance->CR3, USART_CR3_TXFTIE);
3463 #if defined(USART_CR2_SLVEN) 3465 if (husart->
SlaveMode == USART_SLAVEMODE_ENABLE)
3467 __HAL_USART_CLEAR_UDRFLAG(husart);
3468 __HAL_USART_SEND_REQ(husart, USART_TXDATA_FLUSH_REQUEST);
3475 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 3483 #if defined(USART_CR1_FIFOEN) 3484 else if ((READ_BIT(husart->
Instance->CR1, USART_CR1_TCIE) != USART_CR1_TCIE) &&
3485 (txftie != USART_CR3_TXFTIE) &&
3486 (txdatacount == 0U))
3488 else if ((READ_BIT(husart->
Instance->CR1, USART_CR1_TCIE) != USART_CR1_TCIE) &&
3489 (txdatacount == 0U))
3495 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 3508 #if defined(USART_CR2_SLVEN) 3510 (husart->
SlaveMode == USART_SLAVEMODE_DISABLE))
3516 husart->
Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF);
3525 #if defined(USART_CR1_FIFOEN) 3538 uint16_t txdatacount;
3539 uint16_t rxdatacount;
3540 uint16_t uhMask = husart->
Mask;
3541 uint16_t nb_rx_data;
3550 if (__HAL_USART_GET_FLAG(husart, USART_FLAG_RXFNE) == SET)
3565 husart->
RxISR = NULL;
3568 txftie = READ_BIT(husart->
Instance->CR3, USART_CR3_TXFTIE);
3573 #if defined(USART_CR2_SLVEN) 3575 if (husart->
SlaveMode == USART_SLAVEMODE_ENABLE)
3577 __HAL_USART_CLEAR_UDRFLAG(husart);
3578 __HAL_USART_SEND_REQ(husart, USART_TXDATA_FLUSH_REQUEST);
3586 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 3594 else if ((READ_BIT(husart->
Instance->CR1, USART_CR1_TCIE) != USART_CR1_TCIE) &&
3595 (txftie != USART_CR3_TXFTIE) &&
3596 (txdatacount == 0U))
3602 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 3615 #if defined(USART_CR2_SLVEN) 3617 (husart->
SlaveMode == USART_SLAVEMODE_DISABLE))
3623 husart->
Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF);
3637 if (((rxdatacount != 0U)) && (rxdatacount < husart->NbRxDataToProcess))
3646 SET_BIT(husart->
Instance->CR1, USART_CR1_RXNEIE_RXFNEIE);
3648 #if defined(USART_CR2_SLVEN) 3651 (husart->
SlaveMode == USART_SLAVEMODE_DISABLE))
3658 husart->
Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF);
3665 __HAL_USART_SEND_REQ(husart, USART_RXDATA_FLUSH_REQUEST);
3681 uint16_t txdatacount;
3682 uint16_t rxdatacount;
3684 uint16_t uhMask = husart->
Mask;
3685 uint16_t nb_rx_data;
3694 if (__HAL_USART_GET_FLAG(husart, USART_FLAG_RXFNE) == SET)
3697 *tmp = (uint16_t)(husart->
Instance->RDR & uhMask);
3710 husart->
RxISR = NULL;
3713 txftie = READ_BIT(husart->
Instance->CR3, USART_CR3_TXFTIE);
3718 #if defined(USART_CR2_SLVEN) 3720 if (husart->
SlaveMode == USART_SLAVEMODE_ENABLE)
3722 __HAL_USART_CLEAR_UDRFLAG(husart);
3723 __HAL_USART_SEND_REQ(husart, USART_TXDATA_FLUSH_REQUEST);
3731 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 3739 else if ((READ_BIT(husart->
Instance->CR1, USART_CR1_TCIE) != USART_CR1_TCIE) &&
3740 (txftie != USART_CR3_TXFTIE) &&
3741 (txdatacount == 0U))
3747 #if (USE_HAL_USART_REGISTER_CALLBACKS == 1) 3760 #if defined(USART_CR2_SLVEN) 3762 (husart->
SlaveMode == USART_SLAVEMODE_DISABLE))
3768 husart->
Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF);
3782 if (((rxdatacount != 0U)) && (rxdatacount < husart->NbRxDataToProcess))
3791 SET_BIT(husart->
Instance->CR1, USART_CR1_RXNEIE_RXFNEIE);
3793 #if defined(USART_CR2_SLVEN) 3796 (husart->
SlaveMode == USART_SLAVEMODE_DISABLE))
3803 husart->
Instance->TDR = (USART_DUMMY_DATA & (uint16_t)0x00FF);
3810 __HAL_USART_SEND_REQ(husart, USART_RXDATA_FLUSH_REQUEST);
static void USART_DMARxHalfCplt(DMA_HandleTypeDef *hdma)
DMA USART receive process half complete callback.
HAL_StatusTypeDef HAL_USART_Receive(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)
Receive an amount of data in blocking mode.
__IO HAL_USART_StateTypeDef State
register uint32_t brrtemp
void(* XferAbortCallback)(struct __DMA_HandleTypeDef *hdma)
void HAL_USART_IRQHandler(USART_HandleTypeDef *husart)
Handle USART interrupt request.
USART_ClockSourceTypeDef
USART clock sources definitions.
static void USART_RxISR_16BIT_FIFOEN(USART_HandleTypeDef *husart)
Simplex receive an amount of data in non-blocking mode.
void(* MspDeInitCallback)(struct __USART_HandleTypeDef *husart)
static void USART_TxISR_16BIT(USART_HandleTypeDef *husart)
Simplex send an amount of data in non-blocking mode.
static void USART_DMAReceiveCplt(DMA_HandleTypeDef *hdma)
DMA USART receive process complete callback.
DMA handle Structure definition.
HAL_USART_CallbackIDTypeDef
HAL USART Callback ID enumeration definition.
static void USART_RxISR_16BIT(USART_HandleTypeDef *husart)
Simplex receive an amount of data in non-blocking mode.
void(* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma)
void(* TxFifoEmptyCallback)(struct __USART_HandleTypeDef *husart)
HAL_USART_StateTypeDef HAL_USART_GetState(USART_HandleTypeDef *husart)
Return the USART handle state.
This file contains all the functions prototypes for the HAL module driver.
void USART_InitCallbacksToDefault(USART_HandleTypeDef *husart)
Initialize the callbacks to their default values.
void HAL_USART_MspInit(USART_HandleTypeDef *husart)
Initialize the USART MSP.
void(* TxHalfCpltCallback)(struct __USART_HandleTypeDef *husart)
void HAL_USART_TxHalfCpltCallback(USART_HandleTypeDef *husart)
Tx Half Transfer completed callback.
HAL_StatusTypeDef HAL_USART_Abort_IT(USART_HandleTypeDef *husart)
Abort ongoing transfers (Interrupt mode).
HAL_StatusTypeDef HAL_USART_Init(USART_HandleTypeDef *husart)
Initialize the USART mode according to the specified parameters in the USART_InitTypeDef and initiali...
void HAL_USARTEx_TxFifoEmptyCallback(USART_HandleTypeDef *husart)
USART TX Fifo empty callback.
HAL_StatusTypeDef HAL_USART_DMAStop(USART_HandleTypeDef *husart)
Stop the DMA Transfer.
HAL_StatusTypeDef HAL_USART_Transmit_DMA(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size)
Send an amount of data in DMA mode.
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
DMA_Channel_TypeDef * Instance
void(* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma)
HAL_StatusTypeDef HAL_USART_Receive_IT(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size)
Receive an amount of data in interrupt mode.
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer in Interrupt mode.
static void USART_RxISR_8BIT_FIFOEN(USART_HandleTypeDef *husart)
Simplex receive an amount of data in non-blocking mode.
HAL_StatusTypeDef HAL_USART_Abort(USART_HandleTypeDef *husart)
Abort ongoing transfers (blocking mode).
void(* XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma)
uint32_t HAL_USART_GetError(USART_HandleTypeDef *husart)
Return the USART error code.
static void USART_TxISR_8BIT_FIFOEN(USART_HandleTypeDef *husart)
Simplex send an amount of data in non-blocking mode.
uint32_t HAL_RCC_GetPCLK2Freq(void)
Return the PCLK2 frequency.
HAL_USART_StateTypeDef
HAL USART State structures definition.
void(* TxISR)(struct __USART_HandleTypeDef *husart)
static void USART_DMATransmitCplt(DMA_HandleTypeDef *hdma)
DMA USART transmit process complete callback.
static void USART_DMAAbortOnError(DMA_HandleTypeDef *hdma)
DMA USART communication abort callback, when initiated by HAL services on Error (To be called at end ...
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
Start the DMA Transfer with interrupt enabled.
HAL_StatusTypeDef HAL_USART_UnRegisterCallback(USART_HandleTypeDef *husart, HAL_USART_CallbackIDTypeDef CallbackID)
Unregister an UART Callback UART callaback is redirected to the weak predefined callback.
void HAL_USART_RxCpltCallback(USART_HandleTypeDef *husart)
Rx Transfer completed callback.
CLEAR_BIT(hrtc->Instance->CR, RTC_CR_WUTE)
static HAL_StatusTypeDef USART_SetConfig(USART_HandleTypeDef *husart)
Configure the USART peripheral.
void HAL_USART_TxCpltCallback(USART_HandleTypeDef *husart)
Tx Transfer completed callback.
static void USART_TxISR_8BIT(USART_HandleTypeDef *husart)
Simplex send an amount of data in non-blocking mode.
static void USART_DMATxAbortCallback(DMA_HandleTypeDef *hdma)
DMA USART Tx communication abort callback, when initiated by user (To be called at end of DMA Tx Abor...
HAL_StatusTypeDef HAL_USART_TransmitReceive(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)
Full-Duplex Send and Receive an amount of data in blocking mode.
static void USART_RxISR_8BIT(USART_HandleTypeDef *husart)
Simplex receive an amount of data in non-blocking mode.
void(* ErrorCallback)(struct __USART_HandleTypeDef *husart)
void(* RxHalfCpltCallback)(struct __USART_HandleTypeDef *husart)
void(* pUSART_CallbackTypeDef)(USART_HandleTypeDef *husart)
HAL USART Callback pointer definition.
HAL_StatusTypeDef HAL_USART_DeInit(USART_HandleTypeDef *husart)
DeInitialize the USART peripheral.
static void USART_TxISR_16BIT_FIFOEN(USART_HandleTypeDef *husart)
Simplex send an amount of data in non-blocking mode.
HAL_StatusTypeDef HAL_USART_Receive_DMA(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size)
Receive an amount of data in DMA mode.
static void USART_DMAError(DMA_HandleTypeDef *hdma)
DMA USART communication error callback.
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
Abort the DMA Transfer.
HAL_StatusTypeDef HAL_USART_TransmitReceive_DMA(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size)
Full-Duplex Transmit Receive an amount of data in non-blocking mode.
static void USART_EndTransfer(USART_HandleTypeDef *husart)
End ongoing transfer on USART peripheral (following error detection or Transfer completion).
static HAL_StatusTypeDef USART_CheckIdleState(USART_HandleTypeDef *husart)
Check the USART Idle State.
DMA_HandleTypeDef * hdmatx
USART handle Structure definition.
void HAL_USART_RxHalfCpltCallback(USART_HandleTypeDef *husart)
Rx Half Transfer completed callback.
HAL_StatusTypeDef HAL_USART_DMAResume(USART_HandleTypeDef *husart)
Resume the DMA Transfer.
void(* RxCpltCallback)(struct __USART_HandleTypeDef *husart)
uint16_t NbTxDataToProcess
HAL_StatusTypeDef HAL_USART_Transmit(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size, uint32_t Timeout)
Simplex send an amount of data in blocking mode.
void(* MspInitCallback)(struct __USART_HandleTypeDef *husart)
void(* RxISR)(struct __USART_HandleTypeDef *husart)
HAL_StatusTypeDef HAL_USART_DMAPause(USART_HandleTypeDef *husart)
Pause the DMA Transfer.
void(* RxFifoFullCallback)(struct __USART_HandleTypeDef *husart)
HAL_StatusTypeDef HAL_USART_TransmitReceive_IT(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size)
Full-Duplex Send and Receive an amount of data in interrupt mode.
void HAL_USART_AbortCpltCallback(USART_HandleTypeDef *husart)
USART Abort Complete callback.
uint32_t HAL_RCC_GetSysClockFreq(void)
Return the SYSCLK frequency.
void HAL_USART_ErrorCallback(USART_HandleTypeDef *husart)
USART error callback.
void HAL_USART_TxRxCpltCallback(USART_HandleTypeDef *husart)
Tx/Rx Transfers completed callback for the non-blocking process.
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
static void USART_EndTransmit_IT(USART_HandleTypeDef *husart)
Wraps up transmission in non-blocking mode.
DMA_HandleTypeDef * hdmarx
void(* TxRxCpltCallback)(struct __USART_HandleTypeDef *husart)
void(* AbortCpltCallback)(struct __USART_HandleTypeDef *husart)
static HAL_StatusTypeDef USART_WaitOnFlagUntilTimeout(USART_HandleTypeDef *husart, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout)
Handle USART Communication Timeout.
static void USART_DMARxAbortCallback(DMA_HandleTypeDef *hdma)
DMA USART Rx communication abort callback, when initiated by user (To be called at end of DMA Rx Abor...
HAL_StatusTypeDef HAL_USART_RegisterCallback(USART_HandleTypeDef *husart, HAL_USART_CallbackIDTypeDef CallbackID, pUSART_CallbackTypeDef pCallback)
Register a User USART Callback To be used instead of the weak predefined callback.
static void USART_DMATxHalfCplt(DMA_HandleTypeDef *hdma)
DMA USART transmit process half complete callback.
__IO uint16_t RxXferCount
uint32_t HAL_RCC_GetPCLK1Freq(void)
Return the PCLK1 frequency.
void HAL_USARTEx_RxFifoFullCallback(USART_HandleTypeDef *husart)
USART RX Fifo full callback.
uint16_t NbRxDataToProcess
HAL_StatusTypeDef HAL_USART_Transmit_IT(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size)
Send an amount of data in interrupt mode.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))
void(* TxCpltCallback)(struct __USART_HandleTypeDef *husart)
uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma)
Return the DMA error code.
__IO uint16_t TxXferCount
void HAL_USART_MspDeInit(USART_HandleTypeDef *husart)
DeInitialize the USART MSP.