在用ch32v307rct6 做一个串口交互的程序:想要先输出一个提示符号'#' 然后回显键入的非0x0d/0x0a 的字符,当键入0x0d/0x0a 后,显示整个字符串,换新行,显示'#'. 重复上述过程。
void usart_printf_test(void)
{
uint8_t c,vnIn ;
char vsBuf[64] = {0};
printf("#");
while(1) {
if((c = USART_getchar())== 0x1b) break;
if((c == 0x0d )||(c == 0x0a)) {
if(vsBuf[0] != '\0') printf("%s",vsBuf);
printf("\r\n");
for(vnIn= 0; vnIn < 64; vnIn++) vsBuf[vnIn] = 0;
vnIn = 0;
printf("#");
}
else {
printf("%c",c);
vsBuf[vnIn++] = c;
if(vnIn == 64) vnIn = 0;
}
}
return ;
}
上述代码在keil 上编译下载到stm32f103 上没问题,移植到ch32v307 在MRS 编译下载到ch32v307 上始终不对,只按回车键,ch32v307 应该会送的字符时:0x0d 0x0a 0x23(#) , 但实际送回的顺序是:0x23 0x0d 0x0a ,无法实现在提示符后显示键入字符的功能。