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 )// 判断是由哪个串口触发的中断

        { //回调应用代码  }

       }

    

猜你喜欢

转载自www.cnblogs.com/qu-yang/p/12676103.html