我遇到了一个问题,我想从 stm32f4 中的 USART 接收多个输入 例如,如果我在键盘上按住 A、S、D(不松开 A 和 S),然后执行诸如打印出值之类的操作。
我知道 USART 只能接收一个输入,但有没有一种方法使用某种缓冲区或中断来模拟它至少像这样。 举个例子就好了。 谢谢!
无效服务USART2(无效){ 开关(g_usart2_buffer[g_usart2_ridx++]){
case 0x61: //Slovo A
{
note = 1;
printUSART2("C");
break;
}
case 0x77: // Slovo W
{
note = 2;
printUSART2("Cis");
break;
}
case 0x73: //Slovo S
{
note = 3;
printUSART2("D");
break;
}
case 0x65: //Slovo E
{
note = 4;
printUSART2("Dis");
break;
}
case 0x64: //Slovo D
{
note = 5;
printUSART2("E");
break;
}
case 0x66: // Slovo F
{
note = 6;
printUSART2("F");
break;
}
case 0x74: //Slovo T
{
note = 7;
printUSART2("Fis");
break;
}
case 0x67: //Slovo G
{
note = 8;
printUSART2("G");
break;
}
case 0x79: //Slovo Y
{
note = 9;
printUSART2("Gis");
break;
}
case 0x68: //Slovo H
{
note = 10;
printUSART2("A");
break;
}
case 0x75: //Slovo U;
{
note = 11;
printUSART2("Ais");
break;
}
case 0x6A: //Slovo J
{
note = 12;
printUSART2("H");
break;
}
case 0x6B: //Slovo K;
{
note = 13;
printUSART2("C2");
break;
}
case 0x20: //Space Bar
{
note = 0;
printUSART2("PAUSE");
break;
}
case 0x6D: //Octave Up
{
octave++;
printUSART2("Octave Up");
break;
}
case 0x6E: //Octave Down
{
octave--;
printUSART2("Octave Down");
break;
}
default:
{
break;
}
}
}
无效 chkBuffUSART2(无效){
if(g_usart2_ridx != g_usart2_widx)
{
serviceUSART2();
if(g_usart2_ridx >= (USART2_BUFFER_SIZE))
{
g_usart2_ridx = 0;
}
}
}