Go to the documentation of this file.
157 #include "stm32h7xx_hal.h"
168 #ifdef HAL_UART_MODULE_ENABLED
175 #define USART_CR1_FIELDS ((uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | \
176 USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8| \
179 #define USART_CR3_FIELDS ((uint32_t)(USART_CR3_RTSE | USART_CR3_CTSE | USART_CR3_ONEBIT| \
180 USART_CR3_TXFTCFG | USART_CR3_RXFTCFG ))
182 #define LPUART_BRR_MIN 0x00000300U
183 #define LPUART_BRR_MAX 0x000FFFFFU
185 #define UART_BRR_MIN 0x10U
186 #define UART_BRR_MAX 0x0000FFFFU
194 const uint16_t
UARTPrescTable[12] = {1U, 2U, 4U, 6U, 8U, 10U, 12U, 16U, 32U, 64U, 128U, 256U};
321 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
322 UART_InitCallbacksToDefault(
huart);
386 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
387 UART_InitCallbacksToDefault(
huart);
472 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
473 UART_InitCallbacksToDefault(
huart);
556 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
557 UART_InitCallbacksToDefault(
huart);
633 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
684 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
708 pUART_CallbackTypeDef pCallback)
712 if (pCallback ==
NULL)
725 case HAL_UART_TX_HALFCOMPLETE_CB_ID :
726 huart->TxHalfCpltCallback = pCallback;
729 case HAL_UART_TX_COMPLETE_CB_ID :
730 huart->TxCpltCallback = pCallback;
733 case HAL_UART_RX_HALFCOMPLETE_CB_ID :
734 huart->RxHalfCpltCallback = pCallback;
737 case HAL_UART_RX_COMPLETE_CB_ID :
738 huart->RxCpltCallback = pCallback;
741 case HAL_UART_ERROR_CB_ID :
742 huart->ErrorCallback = pCallback;
745 case HAL_UART_ABORT_COMPLETE_CB_ID :
746 huart->AbortCpltCallback = pCallback;
749 case HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID :
750 huart->AbortTransmitCpltCallback = pCallback;
753 case HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID :
754 huart->AbortReceiveCpltCallback = pCallback;
757 case HAL_UART_WAKEUP_CB_ID :
758 huart->WakeupCallback = pCallback;
761 case HAL_UART_RX_FIFO_FULL_CB_ID :
762 huart->RxFifoFullCallback = pCallback;
765 case HAL_UART_TX_FIFO_EMPTY_CB_ID :
766 huart->TxFifoEmptyCallback = pCallback;
769 case HAL_UART_MSPINIT_CB_ID :
770 huart->MspInitCallback = pCallback;
773 case HAL_UART_MSPDEINIT_CB_ID :
774 huart->MspDeInitCallback = pCallback;
788 case HAL_UART_MSPINIT_CB_ID :
789 huart->MspInitCallback = pCallback;
792 case HAL_UART_MSPDEINIT_CB_ID :
793 huart->MspDeInitCallback = pCallback;
846 case HAL_UART_TX_HALFCOMPLETE_CB_ID :
850 case HAL_UART_TX_COMPLETE_CB_ID :
854 case HAL_UART_RX_HALFCOMPLETE_CB_ID :
858 case HAL_UART_RX_COMPLETE_CB_ID :
862 case HAL_UART_ERROR_CB_ID :
866 case HAL_UART_ABORT_COMPLETE_CB_ID :
870 case HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID :
874 case HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID :
878 case HAL_UART_WAKEUP_CB_ID :
882 case HAL_UART_RX_FIFO_FULL_CB_ID :
886 case HAL_UART_TX_FIFO_EMPTY_CB_ID :
890 case HAL_UART_MSPINIT_CB_ID :
894 case HAL_UART_MSPDEINIT_CB_ID :
909 case HAL_UART_MSPINIT_CB_ID :
913 case HAL_UART_MSPDEINIT_CB_ID :
1035 uint8_t *pdata8bits;
1036 uint16_t *pdata16bits;
1042 if ((pData ==
NULL) || (Size == 0U))
1062 pdata16bits = (uint16_t *) pData;
1078 if (pdata8bits ==
NULL)
1124 uint8_t *pdata8bits;
1125 uint16_t *pdata16bits;
1132 if ((pData ==
NULL) || (Size == 0U))
1156 pdata16bits = (uint16_t *) pData;
1173 if (pdata8bits ==
NULL)
1212 if ((pData ==
NULL) || (Size == 0U))
1286 if ((pData ==
NULL) || (Size == 0U))
1367 if ((pData ==
NULL) || (Size == 0U))
1443 if ((pData ==
NULL) || (Size == 0U))
1608 UART_EndTxTransfer(
huart);
1632 UART_EndRxTransfer(
huart);
1863 uint32_t abortcplt = 1U;
1949 if (abortcplt == 1U)
1979 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
2042 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
2069 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
2138 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
2162 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
2185 uint32_t errorflags;
2190 if (errorflags == 0U)
2206 if ((errorflags != 0U)
2278 UART_EndRxTransfer(
huart);
2302 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
2315 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
2328 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
2350 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
2375 UART_EndTransmit_IT(
huart);
2382 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
2395 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
2833 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
2864 uint32_t lpuart_ker_ck_pres;
2930 switch (clocksource)
2982 if ((usartdiv >= LPUART_BRR_MIN) && (usartdiv <= LPUART_BRR_MAX))
2996 switch (clocksource)
3038 if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX))
3040 brrtemp = (uint16_t)(usartdiv & 0xFFF0U);
3041 brrtemp |= (uint16_t)((usartdiv & (uint16_t)0x000FU) >> 1U);
3052 switch (clocksource)
3094 if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX))
3246 uint32_t Tickstart, uint32_t Timeout)
3254 if (((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
3354 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
3373 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
3408 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
3426 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
3452 UART_EndTxTransfer(
huart);
3460 UART_EndRxTransfer(
huart);
3465 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
3486 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
3539 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
3590 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
3624 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
3657 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
3736 uint16_t nb_tx_data;
3777 uint16_t nb_tx_data;
3826 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
3867 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
3901 *tmp = (uint16_t)(uhdata & uhMask);
3919 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
3946 uint16_t nb_rx_data;
3947 uint16_t rxdatacount;
3973 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
3988 if ((rxdatacount != 0U) && (rxdatacount < huart->NbRxDataToProcess))
4019 uint16_t nb_rx_data;
4020 uint16_t rxdatacount;
4029 *tmp = (uint16_t)(uhdata & uhMask);
4047 #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
4062 if ((rxdatacount != 0U) && (rxdatacount < huart->NbRxDataToProcess))
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
#define IS_UART_OVERRUN(__OVERRUN__)
Ensure that UART frame overrun setting is valid.
#define assert_param(expr)
Include module's header file.
#define UART_ADVFEATURE_AUTOBAUDRATE_ENABLE
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
#define USART_CR1_TXEIE_TXFNFIE
void(* TxISR)(struct __UART_HandleTypeDef *huart)
HAL_StatusTypeDef
HAL Status structures definition
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
HAL_UART_StateTypeDef
HAL UART State structures definition.
uint16_t NbRxDataToProcess
HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart)
const uint16_t UARTPrescTable[12]
uint16_t NbTxDataToProcess
#define HAL_UART_ERROR_NE
HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
void(* XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma)
#define IS_UART_HWFLOW_INSTANCE(INSTANCE)
uint32_t PLL3_Q_Frequency
#define HAL_UART_ERROR_FE
DMA handle Structure definition.
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
#define UART_INSTANCE_LOWPOWER(__HANDLE__)
Check whether or not UART instance is Low Power UART.
#define USART_CR2_ABRMODE
#define IS_UART_HALFDUPLEX_INSTANCE(INSTANCE)
#define HAL_DMA_ERROR_TIMEOUT
#define USART_CR2_MSBFIRST
#define IS_UART_ADVFEATURE_MSBFIRST(__MSBFIRST__)
Ensure that UART frame MSB first setting is valid.
#define IS_UART_ADVFEATURE_AUTOBAUDRATE(__AUTOBAUDRATE__)
Ensure that UART auto Baud rate state is valid.
#define UART_ADVFEATURE_MSBFIRST_INIT
#define HAL_UART_ERROR_RTO
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
#define IS_UART_MODE(MODE)
#define UART_ADVFEATURE_NO_INIT
#define IS_UART_RECEIVER_TIMEOUT_VALUE(__TIMEOUTVALUE__)
Check the receiver timeout value.
__IO uint16_t TxXferCount
HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart)
#define USART_ISR_RXNE_RXFNE
void UART_AdvFeatureConfig(UART_HandleTypeDef *huart)
uint32_t HAL_RCCEx_GetD3PCLK1Freq(void)
HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart)
uint32_t HAL_RCC_GetPCLK2Freq(void)
void(* XferAbortCallback)(struct __DMA_HandleTypeDef *hdma)
HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode(UART_HandleTypeDef *huart)
UART handle Structure definition.
#define __HAL_UART_ENABLE(__HANDLE__)
Enable UART.
#define UART_DIV_LPUART(__PCLK__, __BAUD__, __CLOCKPRESCALER__)
BRR division operation to set BRR register with LPUART.
#define UART_ADVFEATURE_RXINVERT_INIT
uint32_t RxPinLevelInvert
#define UART_WORDLENGTH_9B
#define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__)
Checks whether the specified UART flag is set or not.
#define __HAL_UART_DISABLE(__HANDLE__)
Disable UART.
#define CLEAR_BIT(REG, BIT)
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
HAL_StatusTypeDef HAL_UART_DisableReceiverTimeout(UART_HandleTypeDef *huart)
#define IS_UART_WAKEUPMETHOD(WAKEUP)
#define HAL_UART_ERROR_PE
#define UART_CR2_ADDRESS_LSB_POS
HAL_StatusTypeDef HAL_MultiProcessor_DisableMuteMode(UART_HandleTypeDef *huart)
HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart)
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
UART MSP Initialization This function configures the hardware resources used in this example.
#define UART_ADVFEATURE_DATAINVERT_INIT
#define UART_HWCONTROL_NONE
#define USART_CR1_RXNEIE_RXFNEIE
#define IS_UART_PRESCALER(__CLOCKPRESCALER__)
Ensure that UART Prescaler is valid.
#define UART_OVERSAMPLING_8
void HAL_UART_ReceiverTimeout_Config(UART_HandleTypeDef *huart, uint32_t TimeoutValue)
HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart)
#define IS_UART_ADVFEATURE_SWAP(__SWAP__)
Ensure that UART frame RX/TX pins swap setting is valid.
HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
#define IS_UART_ADVFEATURE_RXINV(__RXINV__)
Ensure that UART frame RX inversion setting is valid.
#define IS_UART_PARITY(PARITY)
#define HSI_VALUE
Internal High Speed oscillator (HSI) value. This value is used by the RCC HAL module to compute the s...
#define IS_UART_LIN_BREAK_DETECT_LENGTH(LENGTH)
void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart)
#define UART_FIFOMODE_ENABLE
void HAL_UARTEx_TxFifoEmptyCallback(UART_HandleTypeDef *huart)
DMA_HandleTypeDef * hdmatx
#define IS_UART_ONE_BIT_SAMPLE(__ONEBIT__)
Ensure that UART frame sampling is valid.
#define __HAL_LOCK(__HANDLE__)
HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart)
#define IS_UART_ADVFEATURE_DMAONRXERROR(__DMA__)
Ensure that UART DMA enabling or disabling on error setting is valid.
#define CSI_VALUE
Internal oscillator (CSI) default value. This value is the default CSI value after Reset.
HAL_StatusTypeDef HAL_UART_EnableReceiverTimeout(UART_HandleTypeDef *huart)
HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart)
#define MODIFY_REG(REG, CLEARMASK, SETMASK)
#define HAL_UART_ERROR_DMA
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
#define HAL_UART_ERROR_ORE
HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart)
#define UART_MUTE_MODE_REQUEST
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
uint32_t DMADisableonRxError
@ UART_CLOCKSOURCE_D3PCLK1
RCC PLL2 Clocks structure definition.
uint32_t AutoBaudRateMode
__IO HAL_UART_StateTypeDef RxState
#define IS_LPUART_INSTANCE(INSTANCE)
#define HAL_UART_TIMEOUT_VALUE
#define __HAL_UNLOCK(__HANDLE__)
uint32_t TxPinLevelInvert
#define USART_ISR_TXE_TXFNF
#define READ_BIT(REG, BIT)
#define UART_WORDLENGTH_8B
UART_AdvFeatureInitTypeDef AdvancedInit
UART_ClockSourceTypeDef
UART clock sources definition.
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
void(* RxISR)(struct __UART_HandleTypeDef *huart)
#define __HAL_UART_SEND_REQ(__HANDLE__, __REQ__)
Set a specific UART request flag.
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
void HAL_RCCEx_GetPLL3ClockFreq(PLL3_ClocksTypeDef *PLL3_Clocks)
@ UART_CLOCKSOURCE_D2PCLK1
__IO HAL_UART_StateTypeDef gState
#define HAL_UART_ERROR_NONE
#define UART_ADVFEATURE_DMADISABLEONERROR_INIT
DMA_HandleTypeDef * hdmarx
HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
#define IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(__INSTANCE__)
uint32_t PLL2_Q_Frequency
#define LSE_VALUE
External Low Speed oscillator (LSE) value.
#define UART_TXDATA_FLUSH_REQUEST
#define UART_WAKEUPMETHOD_ADDRESSMARK
#define IS_UART_LIN_INSTANCE
HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart)
#define UART_ADVFEATURE_TXINVERT_INIT
void(* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma)
RCC PLL3 Clocks structure definition.
#define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL)
HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout)
uint32_t HAL_RCC_GetPCLK1Freq(void)
#define UART_MASK_COMPUTATION(__HANDLE__)
Report the UART mask to apply to retrieve the received data according to the word length and to the p...
#define __HAL_RCC_GET_FLAG(__FLAG__)
#define UART_RXDATA_FLUSH_REQUEST
HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethod)
HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart)
HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength)
#define UART_GETCLOCKSOURCE(__HANDLE__, __CLOCKSOURCE__)
Report the UART clock source.
#define USART_PRESC_PRESCALER
void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart)
#define UART_ADVFEATURE_RXOVERRUNDISABLE_INIT
#define HAL_IS_BIT_SET(REG, BIT)
#define IS_UART_STOPBITS(STOPBITS)
void HAL_RCCEx_GetPLL2ClockFreq(PLL2_ClocksTypeDef *PLL2_Clocks)
uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma)
HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart)
#define UART_DIV_SAMPLING8(_PCLK_, _BAUD_)
#define UART_ADVFEATURE_SWAP_INIT
#define IS_UART_WORD_LENGTH(LENGTH)
#define SET_BIT(REG, BIT)
void HAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef *huart)
#define IS_UART_OVERSAMPLING(SAMPLING)
void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart)
#define UART_DIV_SAMPLING16(_PCLK_, _BAUD_)
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
HAL_StatusTypeDef HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart)
#define UART_SENDBREAK_REQUEST
#define IS_UART_ADVFEATURE_DATAINV(__DATAINV__)
Ensure that UART frame data inversion setting is valid.
#define IS_UART_ADVFEATURE_TXINV(__TXINV__)
Ensure that UART frame TX inversion setting is valid.
@ UART_CLOCKSOURCE_D2PCLK2
#define UART_ADVFEATURE_AUTOBAUDRATE_INIT
#define __HAL_RCC_GET_HSI_DIVIDER()
Macro to get the HSI divider.
void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart)
#define IS_UART_ADVFEATURE_INIT(__INIT__)
Ensure that UART advanced features initialization is valid.
#define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__)
Clears the specified UART pending flag.
#define USART_CR2_DATAINV
__IO uint16_t RxXferCount
void HAL_UART_MspDeInit(UART_HandleTypeDef *huart)
UART MSP De-Initialization This function freeze the hardware resources used in this example.
void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart)
#define IS_LPUART_STOPBITS(__STOPBITS__)
Ensure that LPUART frame number of stop bits is valid.
uint32_t AutoBaudRateEnable
HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart)
void HAL_UARTEx_RxFifoFullCallback(UART_HandleTypeDef *huart)
HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart)
void(* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma)
#define IS_UART_ADVFEATURE_AUTOBAUDRATEMODE(__MODE__)
Ensure that UART auto Baud rate detection mode is valid.
#define IS_UART_BAUDRATE(BAUDRATE)
uint32_t HAL_UART_GetError(UART_HandleTypeDef *huart)