STM32 HAL库串口中断发送与接收详解

系列文章目录

【STM32】HAL库 新建MDK工程
【STM32】HAL库 串口轮询发送

文章目录

  • 系列文章目录
  • 前言
  • 一、STM32CubeMX设置
  • 二、代码
  • 中断发送字符串
  • 中断发送数组
  • 主函数
  • 中断接收
  • 不定长字符串接收

  • 前言

    使用stm32串口中断发送和中断接收

    一、STM32CubeMX设置

    使能串口中断

    二、代码

    中断发送字符串

    void Serial_SendString(char *String)
    {
    		HAL_UART_Transmit_IT(&huart1,(uint8_t *)String,strlen(String));
    }
    

    中断发送数组

    void Serial_SendArray(uint8_t *Array, uint16_t Length)
    {
    		HAL_UART_Transmit_IT(&huart1,Array,Length);
    }
    

    主函数

    /* USER CODE BEGIN PV */
    char String[] = {"hello world\r\n"};
    uint8_t Tarr[7] = {0x77,0x6F,0x72,0x6C,0x64,0x0D,0x0A};
    /* USER CODE END PV */
    
      while (1)
      {
        /* USER CODE END WHILE */
    
        /* USER CODE BEGIN 3 */
    		 Serial_SendString(String);
    		 HAL_Delay(1000);
    		
    		 Serial_SendArray(Tarr, sizeof(Tarr)/sizeof(Tarr[0]));
         	 HAL_Delay(1000);
      }
        /* USER CODE END 3 */
    

    中断接收

    在主函数前开启中断,接受字节数为5

    uint8_t Rarr[5] = {0};
    
    HAL_UART_Receive_IT(&huart1,Rarr,5);
    

    接受5个字节后,进入中断接收完成回调函数,重新再开启中断,并把接收到的数据返回

    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    {
    	HAL_UART_Receive_IT(&huart1,Rarr,5);
      Serial_SendArray(Rarr,sizeof(Rarr)/sizeof(Rarr[0]));
    }
    

    不定长字符串接收

    修改接收数组长度,改为开启串口空闲中断

    uint8_t Rarr[50] = {0};
    
    HAL_UARTEx_ReceiveToIdle_IT(&huart1,Rarr,50);
    

    接收事件回调函数

     void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
     {
    	   Serial_SendArray(Rarr,Size);
    	   HAL_UARTEx_ReceiveToIdle_IT(&huart1,Rarr,50);
     }
    

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32 HAL库串口中断发送与接收详解

    发表评论