串口下命令行输错了要修改时,要用到退格键的处理。
void USART1_ISR(void)
{
int retry_time;
//溢出处理 如果发生溢出了,要先读SR,再读DR, 已清除不断入中断的问题
if (USART_GetFlagStatus(USART1, USART_FLAG_ORE) == SET)
{
USART_ReceiveData(USART1);
USART_ClearFlag(USART1, USART_FLAG_ORE);
}
retry_time = 0;
UCHAR ch;
while(1)
{
//接收中断, 必须是0xd 0xa结尾
if (USART_GetFlagStatus(USART1, USART_IT_RXNE) != RESET)
{
ch = USART_ReceiveData(USART1);
if (ch == 0xd) {
recv_buf[len] = ch;
len++;
commit = 1;
proc_cmd();
}
else if(ch == '\b') {
if (len) {
len--;
printf(" \b"); //发送空格,光标左移一格
recv_buf[len] = 0;
}
} else {
recv_buf[len] = ch;
len++;
}
retry_time = 0;
continue;
}
retry_time++;
if (retry_time > RETRY_TIMES) break;
}
//清中断
USART_ClearFlag(USART1, USART_IT_RXNE);
}