STM32-HAL库-UART学习
Posted qu-yang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32-HAL库-UART学习相关的知识,希望对你有一定的参考价值。
库函数
以阻塞模式发送数据
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
以阻塞模式接收数据
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
以非阻塞模式发送数据
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
以非阻塞模式接收数据
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
以DMA模式发送数据
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
以DMA模式接收数据
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
应用
以下均以UART1为例
printf重定向
int fputc(int ch, FILE *f)
{
uint8_t temp[1] = {ch};
HAL_UART_Transmit(&huart1, temp, 1, 2);
return ch;
}
非阻塞模式
需要先在STM32CubeMX中打开串口中断(USART1 -> NVIC Settings -> USART1 global interrupt -> Enable)
在USER CODE BEGIN PV中设置缓冲区
uint8_t aRxBuffer[1]; // 用来接收串口发送的数据
在USER CODE BEGIN 2中打开串口中断
HAL_UART_Receive_IT(&huart1,aRxBuffer,1);//接收来自串口1的数据,将其存放在缓冲区中,接收长度为1
在USER CODE BEGIN 4中设置回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart -> Instance == USART1 )// 判断是由哪个串口触发的中断
{ //回调应用代码 }
}
以上是关于STM32-HAL库-UART学习的主要内容,如果未能解决你的问题,请参考以下文章
如何重置 STM32 HAL UART 驱动程序 (HAL) 状态?
带有 STM32 HAL 驱动程序的 FreeRTOS 中的 UART 中断
Stm32 HAL_UART_Receive读取不到数据的问题
Stm32 HAL_UART_Receive读取不到数据的问题