接着《AGV项目底层总结一》这篇博客,就AGV项目底层的代码设计技巧来进行讲解。
串口数据接收处理
串口指令的接收所用中断的方式,同时在中断里进行数据帧的识别,接收完整一帧数据后标志位置1,在main函数中通过标志位的判断来进行接收到指令的相应处理。
//串口1中断服务程序
void USART1_IRQHandler(void)
{
u8 Res;
static u8 reci_step = 0; //数据接收状态机
static u8 length = 0,i = 0; //指令长度计数指针
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断
{
Res = USART1->DR; //(USART1->DR); //读取接收到的数据
switch(reci_step)
{
case 0: //接收判断帧头0xcd
if(Res == 0xcd){
reci_step = 1;
USART1_RX_STA = 1; //开始接收数据帧状态
}
else reci_step = 0;
break;
case 1: //接收判断帧头0xaa
if(Res == 0xaa) reci_step = 2;
else reci_step = 0;
break;
case 2: //接收判断帧头0x55
if(Res == 0x55) reci_step = 3;
else