有限状态机可以实现:字符串匹配(参照算法导论)、多状态转换(闸机控制、温度控制、水位控制等)
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle) { switch(RxState) { case 0: { if(RxData==0x55) RxState=1; }break; case 1: { len = RxData; RxState=2; }break; case 2: { switch(RxData) { case 0xFA: //查询设备指令 HAL_UART_Transmit(&huart1, Inquire,11,10); RxState=0; break; case 0xFC: //停止运行指令 htim4.Instance->CCR1 = 1500; RxState=0; break; case 0xFB: RxState=3; break; default:RxState=0; } }break; case 3: Speed=RxData*256; RxState=4; break; case 4: Speed += RxData; RxState=5; break; case 5: htim4.Instance->CCR1 = Speed; RxState=0; break; default:RxState=0; } /* 采用中断方式接收1个数捿 */ HAL_UART_Receive_IT(&huart1, &RxData,1); }