Library Functions
Send data in blocking mode
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Receive data in blocking mode
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Send data in non-blocking mode
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
Receive data in non-blocking mode
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
Send data in DMA mode
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
Receive data in DMA mode
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
application
The following uses UART1 as an example
printf redirect
int fputc(int ch, FILE *f)
{
uint8_t temp[1] = {ch};
HAL_UART_Transmit(&huart1, temp, 1, 2);
return ch;
}
Non-blocking mode
Need to open serial interrupt in STM32CubeMX (USART1-> NVIC Settings-> USART1 global interrupt-> Enable)
Set buffer in USER CODE BEGIN PV
uint8_t aRxBuffer [1]; // used to receive data sent by serial port
Open serial interrupt in USER CODE BEGIN 2
HAL_UART_Receive_IT (& huart1, aRxBuffer, 1); // Receive the data from serial port 1, store it in the buffer, the receive length is 1
Set callback function in USER CODE BEGIN 4
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (huart-> Instance == USART1) // determine which serial port triggered the interrupt
{// Callback application code}
}