意法半导体MCU STM32的GPRS数据传输技术资料

意法半导体是目前世界最大的半导体公司之一。目前为止意法半导体MCU的增加速度已经超过了半导体工业的总体增加速度。自1999年起,ST始终是世界十大半导体公司之一。据最新的工业统计数据,意法半导体是全球第五大半导体厂商,在不少市场居世界领先水平。尤为是生产得STM32的意法半导体MCU产品,被普遍应用在各类行业领域范围,给当代社会带来了更多的便利.国内本土MCU产品能替换代替兼容的主要有灵动微.一家致力于MCU产品和解决方案的厂商.服务器

下面本文要介绍的是有关于实现STM32 GPRS数据传输技术资料.网络

一、实现细节ide

实现GPRS数据传输的原理是:STM32解析一串数据或命令,而后经过串口或其余方式一个字符一个字符地发送给SIM900A模块,SIM900A接收到数据以后再经过SIM卡发送到服务器。当SIM900A接收到数据时,当即响应中断,按照中断所设置的方式进行数据处理。此时,就须要经过发送检验和接收检验来控制数据的传输。函数

1.一、发送检验开发

因为STM32逐个字符地将数据发送给SIM900A模块,所以必须保证数据的正确性与连贯性。若是在发送的时候响应中断或者进行任务调度,则发送将做废,从而致使程序出错,因此开发者必须警戒该类的错误出现。字符串

发送数据或者命令的时候,能够将数据经过参数传给发送函数,由发送函数统一控制,发送完成以后再返回一个发送完成标志位,告知调用函数者发送已完成。源程序以下:产品

voidUSART_Send_Byte(charMyData){//发送字符函数
USART_ClearFlag(USART2,USART_FLAG_TC);
//清除标志位,如上所述
USART_SendData(USART2,MyData);//发送数据
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);//等待发送完成
}
voidUSART_Send_Str(char*s){//发送字符串
inTI;
intlen=strlen(s)-1;//字符串长度
for(inTI=0;i《len;i++)
USART_Send_Byte(s[i]);//循环将字符串发送出去
if(s[i]==0x0a){//判断发送是否结束
SendCFFlag=TRUE;
//若是为真,则发送完成标志位置为真
}else{
USART_Send_Byte(s[i]);//若是为假,则发送出去
}
}it

1.二、接收检验
当SIM900A有数据返回或者有数据经过SIM900A接收到下位机时,STM32会当即响应中断来接收数据。此时就要在中断函数中进行一系列处理。以SIM900A为例,SIM900A模块返回的命令都是以“r”+“n”+“”结尾,所以检验传输结束能够根据它进行判断。在中断响应函数(即stm32f10x_it.c文件里)的USART2_IRQHandler函数能够设置以下:class

voidUSART2_IRQHandler(void)
{
if(USART_GeTITStatus(USART2,USART_IT_RXNE)!=RESET){
//将接收字符存入接收缓冲区RxBuffer
RxBuffer[ReceCounter++]=(char)USART_ReceiveData(USART2);
//判断是否接收结束
if(RxBuffer[ReceCounter]==′′&&RxBuffer[ReceCounter-1]==0x0A&&
RxBuffer[ReceCounter-2]==0x0D){
ReceCFFlag=TRUE;
}
USART_ClearITPendingBit(USART2,USART_IT_RXNE);
}
}原理

该函数的基本思路是:将USART接收到的字符逐个存入缓冲区,而后判断缓冲区最后3个字符是否为SIM900A的结束标识符。若是为假,继续接收;若是为真,则将接收完成标识符置为真。当接收完成标识符为真时,说明接收完成,接下来就能够进行数据处理了。

1.三、命令函数实现方法
下面将以AT+CIPSEND为例,阐述发送数据的细节。经过初始化模块、开启网络、创建接入点和创建TCP链接以后,就能够开始发送数据。实现源代码以下:

u8GPRS_Send(void){
u8i=0;
u8*p;
USART_SendToGPRS(“AT+CIPSENDrn”);//发送命令
Delay_ms(500);//延时500ms
p=LookFor_Str(RxBuffer,“》”);
//查找是否有“》”符号,若是有,则能够发送数据
if(p!=0){
p=0;
memset(RxBuffer,0,BufferSize);//清空接收缓冲区
USART_SendToGPRS(GPRSSendData);//发送数据
Delay_ms(500);
Delay_ms(500);
Delay_ms(500);
p=LookFor_Str(RxBuffer,“SENDOK”);
if(p!=0){//判断是否发送成功
//发送成功操做
return1;
}else{
//发送失败操做
return0;
}
}
}

该函数的基本思路是:首先发送命令,而后查找是否有“》”符号,若是有,则说明能够开始发送数据。一段延时以后查找接收缓冲区是否有“SENDOK”字眼,有则说明发送成功,没有则表示发送失败。能够根据判断做进一步的操做。

相关文章
相关标签/搜索