stm32串口

串口

/* USER CODE BEGIN PV */
//PA9--TX    PA10--RX6
//定义变量
uint8_t temp;//接收数据
uint8_t RxFlag = 2; //0收到`*`,1表示收到`#`
/* USER CODE END PV */

  /* USER CODE BEGIN 2 */
  //使能接收中断
  HAL_UART_Receive_IT(&huart1, &temp, 1);
  /* USER CODE END 2 */

  /* USER CODE BEGIN WHILE */
  while (1)
  {
    if(RxFlag==0){//接收到'*'
      HAL_GPIO_WritePin(GPIOC,LED_Pin,GPIO_PIN_SET);//熄灭
      HAL_UART_Transmit(&huart1, (uint8_t *)"hello ****!\r\n", 16, 0xff);
    }
    if(RxFlag==1){//接收到'#'
      HAL_GPIO_WritePin(GPIOC,LED_Pin,GPIO_PIN_RESET);//点亮
      HAL_UART_Transmit(&huart1, (uint8_t *)"hello ####!\r\n", 16, 0xff);
    }
    /* USER CODE END WHILE */

/* USER CODE BEGIN 4 */
//中断接受回调函数
  void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
      if(huart->Instance == USART1 && temp == '#'){
          RxFlag = 1;
      }else if (huart->Instance == USART1 && temp == '*'){
          RxFlag = 0;
      }else if (huart->Instance == USART1 && temp == '!'){
          RxFlag = 2;
      }
      HAL_UART_Receive_IT(&huart1, &temp, 1);
  }
/* USER CODE END 4 */


接收到字符保存到数组

/* USER CODE BEGIN PV */
//PA9--TX    PA10--RX6
//定义变量
uint8_t temp;//接收数据  一次接受一个字符
uint8_t arr[20];//存放数据
uint8_t num=0;//接收到的字符个数
uint8_t flag = 0; //1接收开始  2接收结束
uint8_t while_flag = 0; //while循环中使用的标志位
/* USER CODE END PV */

/* USER CODE BEGIN 2 */
  //使能接收中断
  HAL_UART_Receive_IT(&huart1, &temp, 1);
  /* USER CODE END 2 */

  /* USER CODE BEGIN WHILE */
  while (1)
  {
    if(while_flag == 1){
        HAL_UART_Transmit(&huart1, (uint8_t *)"hello while!\r\n", 16, 0xff);
        while_flag = 0;
    }
    /* USER CODE END WHILE */


/* USER CODE BEGIN 4 */
//中断接受回调函数
  void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
      if(huart->Instance == USART1 && temp == '*'){  //接收到*字符 标志置1  开始放入到数组
          flag = 1;
      }
      if(huart->Instance == USART1 && temp == '#'){ //接收到#字符 标志置2  停止放入数组
          flag = 2;
      }
      if(flag == 1){ //*字符 包括后面的字符放入到数组  直至#字符到来
            arr[num] = temp;
            num++;
      }
      if(flag == 2){//#字符 到来  将#放入数组 发送回去 数组清零 标志位清0  接收字符个数清0
            arr[num] = temp;  //arr数据的格式 *字符#  接收*开头#结尾的数据  包括*和#
            num = 0;
            flag = 0;
            if(1){ //比较接收到的数据arr与自定义数据
                while_flag = 1;//while循环中使用的标志位
            }
            HAL_UART_Transmit(&huart1, (uint8_t *)arr, 20, 0xff);
            for(uint8_t i = 0;i<20;i++){
                arr[i] = 0;
            }
      }
      HAL_UART_Receive_IT(&huart1, &temp, 1);
  }
/* USER CODE END 4 */


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值