You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现UART终端启动界面并仅在用户输入后处理响应?

UART启动界面输入响应逻辑实现

问题描述

我希望通过UART终端实现用户启动界面,目前已能显示启动画面,但不知如何处理UART接收逻辑,实现仅在用户完成输入响应后再显示处理结果,而非每次循环都进行处理。

初始代码

enum splashscreen_response_type
{
  TEST_RESPONSE_VALID,
  TEST_RESPONSE_INVALID,
  TEST_RESPONSE_UNKNOWN,
  TEST_RESPONSE_MAX
};

int bootup_disp()
{
  uint8_t  test_type_response = TEST_RESPONSE_UNKNOWN;
  char input[100];              // 存储用户输入的缓冲区
  uint8_t  processed_input;
  uint8_t  chosen_test;
  uint8_t  resp_buff[1];

   
  HAL_UART_Transmit(&hlpuart1,(uint8_t*)"USER CHOICE TYPE 1 for test:", sizeof("USER CHOICE TYPE 1 for test:"), 500);
  HAL_UART_Transmit(&hlpuart1,(uint8_t*)"TYPE USER CHOICE:", sizeof("TYPE USER CHOICE:"), 500);

  do{
      HAL_UART_Receive(&hlpuart1,splash_resp_buff, 1,500);
      
      if(resp_buff == 1)
      {
          HAL_UART_Transmit(&hlpuart1,(uint8_t*)"CORRECT CHOICE", sizeof("CORRECT CHOICE")-1, 500);
          test_type_response = TEST_RESPONSE_VALID);
          
      }
      else
      {
          HAL_UART_Transmit(&hlpuart1,(uint8_t*)"INCORRECT CHOICE", sizeof("INCORRECT CHOICE")-1, 500);
      }
  }
  while (test_type_response != TEST_RESPONSE_VALID);*/

  HAL_UART_Transmit(&hlpuart1,(uint8_t*)splash_resp_buff, sizeof(splash_resp_buff)-1, 500);
}

修改后的代码

int bootup_disp()
{
  uint8_t  test_type_response = TEST_RESPONSE_UNKNOWN;
  char input[100];              // 存储用户输入的缓冲区
  uint8_t  processed_input;
  uint8_t  chosen_test;
  uint8_t  resp_buff[1];


  HAL_UART_Transmit(&hlpuart1,(uint8_t*)"USER CHOICE TYPE 1 for test:", sizeof("USER CHOICE TYPE 1 for test:"), 500);
  HAL_UART_Transmit(&hlpuart1,(uint8_t*)"TYPE USER CHOICE:", sizeof("TYPE USER CHOICE:"), 500);

  do{
      HAL_UART_Receive(&hlpuart1,resp_buff, 1,500);

      if(resp_buff[0] == '1')
      {
          HAL_UART_Transmit(&hlpuart1,(uint8_t*)"CORRECT CHOICE", sizeof("CORRECT CHOICE")-1, 500);
          test_type_response = TEST_RESPONSE_VALID;

      }

      else
      {
          HAL_UART_Transmit(&hlpuart1,(uint8_t*)"INCORRECT CHOICE", sizeof("INCORRECT CHOICE")-1, 500);
      }
  }
  while (test_type_response != TEST_RESPONSE_VALID);

  HAL_UART_Transmit(&hlpuart1,(uint8_t*)resp_buff, sizeof(resp_buff)-1, 500);

}

关键修改说明

  • 修正接收缓冲区变量名:初始代码误用未定义的splash_resp_buff,改为已声明的resp_buff
  • 修复输入判断逻辑:将resp_buff == 1改为resp_buff[0] == '1',正确比较用户输入的字符(而非指针地址)
  • 修复语法错误:移除test_type_response = TEST_RESPONSE_VALID);末尾多余的右括号,删除循环后多余的*/注释符号
  • 逻辑优化:仅当用户输入字符'1'时,才标记响应有效并退出循环;否则提示错误并等待下一次输入,实现了"用户完成输入响应后再显示处理结果"的需求

内容的提问来源于stack exchange,提问作者mm-05

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:14:52