这篇主要是对接收的数据进行分析的编程思路。
第一篇文章中写道,接收数据用什么格式。
现在为了方便直接使用正点原子的代码,改变下格式,也可以不更改,那么需要自己写函数了。
改变后的格式如下:加了0x0d+0x0a,这两个回车换行的字节做帧尾。
接收和发送都需要制定一定的指令格式,并包括简单的校验和,进行数据的校核校验。
接收的格式目前自定义为
三个指令的格式为,
0x7c+0x11+校验和+0x0d+0x0a,作用为A
0x7c+0x22+校验和+0x0d+0x0a,作用为B
0x7c+0x33+校验和+0x0d+0x0a,作用为C。
对串口的详细知识,可以学习正点原子的开发手册。
本实验的目的是读取外部的数据,主要用到下面的函数
1、串口接收函数;
2、获取串口的读取数据接收状态函数;
3、使能串口接收中断,串口有很多中断,这里使能接收的中断;
串口中断函数(参考正点原子例程)
void USART1_IRQHandler(void) //串口1中断服务程序
{
u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据
if((USART_RX_STA&0x8000)==0)//接收未完成
{
if(USART_RX_STA&0x4000)//接收到了0x0d
{
if(Res!=0x0a)
USART_RX_STA=0;//接收错误,重新开始
else
USART_RX_STA|=0x8000; //接收完成了
}
else //还没收到0X0D
{
if(Res==0x0d)
USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
//接收数据错误,重新开始接收
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;
}
}
}
}
}
待续。