如何实现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
相关产品推荐
相关产品推荐

