stm32f103串口发送接收学习笔记3---串口接收(学习参考:正点原子的代码)

这篇主要是对接收的数据进行分析的编程思路。
第一篇文章中写道,接收数据用什么格式。
现在为了方便直接使用正点原子的代码,改变下格式,也可以不更改,那么需要自己写函数了。
改变后的格式如下:加了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;
								}		 
					}
				}   		 
     } 
} 

待续。

猜你喜欢

转载自blog.csdn.net/lmf666/article/details/100036448