在嵌入式开发中,我们经常使用PC向MCU发送一些指令,MCU的串口向PC端回复一些内容,这是典型的上位机和下位机的通讯模式。在PC端我们经常使用串口调试助手、SecureCRT等上位机软件向MCU发送指令,下面我们就以SecureCRT为例(在键盘中按下Enter键,发送0x0D或者0x0D、0x0A),在MCU端简单实现一个函数,完成一个命令行。
//定义命令的最大长度
#define CMD_LENGTH_MAX 32
static char cmd_buff[CMD_LENGTH_MAX];
static char char_rec_index = 0;
static bool time_to_execute = false;
void handleChar(char chr)
{
cmd_buff[char_rec_index] = chr;
switch(chr)
{
//new line
case 0x0A:
return;
//BackSpace
case 0x08:
if(char_rec_index > 0)
{
char_rec_index--;
char dat[3] = {0x08,0x20,0x08};
HAL_UART_Transmit(&huart1, dat, 3, 10);
}
return;
//Enter
case 0x0D:
time_to_execute = true;
printf("\r\n");
break;
default:
//回显
HAL_UART_Transmit(&huart1, chr, 1, 10);
break;
}
if(char_rec_index >= CMD_LENGTH_MAX)
char_rec_index = 0;
else
char_rec_index++;
}
上面的程序中,cmd_buff数组存储了上位机发送过来的字符,char_rec_index记录了已经收到的字符的个数,time_to_execute指示是否收到了上位机按下Enter键,以供其他函数查询是否应该去执行命令。char_rec_index和time_to_execute应该在其他函数中清零。HAL_UART_Transmit(&huart1, dat, 3, 10)使用MCU的uart1发送保存在dat中的3个数据,超时时间为10ms。