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读取不到数据的问题

Stm32 HAL_UART_Receive读取不到数据的问题

细究STM32 HAL库的中断式串口接收