STM32物联网通讯GPRS
一、GPRS相关概念介绍
智能家居和物联网都是目前的新兴产业,智能家居和物联网都是通过无线通讯模块与服务端进行数据通讯。其中GPRS通讯是一种常见的方式。GPRS(通用分组无线业务)的简称,是在现有的GSM系统上新增新GGSM(网络支持节点)和SGSN(服务支持节点)节点发展出来的一种新的分组数据承载业务。GPRS网络传输的主要优点:永远在线、按流量计费、快速登陆、高速传输、覆盖范围内不受限制、数据传输可靠等。
使用GPRS,一般会选择使用GPRS模块,在这里我选择的是广和通厂商的G510模块。GPRS安装到控制器中,主要功能为通过GPRS网络连接到Internet网络,并主动与监听中心建立通信链路,进行双向数据通讯。GPRS模块主要是由G510模块、天线、SIM卡、相关电平转换电路等组成,GPRS模块通过串口与STM32单片机进行数据通讯。
二、基本初始化流程
(1)考虑到模块外围电路电容充电效应,建议上电5s后发送开机初始化在命令。
(2)常用指令
AT+MRST OK ------------- 重启模块,应答
AT+CPIN? READY ------------- 检查SIM卡是否插好
AT+CGREG? OK ------------- 检查网络注册状态
AT+CSQ OK ------------- 信号查询
AT+MIPCALL? : 0 -------------- 查询网络连接状态(0:未连接;1:连接)
AT+MIPCALL=1,\"cmnet\" OK ----------------连接网络
AT+MIPOPEN=1,,\"47.105.162.0\",1883,0 -------------- 连接服务器
(3)数据链路层数据处理:实现GPRS数据接收/发送控制,存储串口中断接收到的数据,发送GPRS数据长度和GPRS数据内容。串口收到数据之后会将数据存储到MIPRTCP_DataStreaming()中,这个函数会将接收到的数据进行解析处理。串口接收数据流程如下:
void USART1_IRQHandler(void) //串口1中断服务程序
{
u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res =USART_ReceiveData(USART1); //读取接收到的数据
MIPRTCP_DataStreaming(Res);
if((USART1_RX_STA&(1<<15))==0)//接收完的一批数据,还没有被处理,则不再接收其他数据
{
if(USART1_RX_STA<USART1_MAX_RECV_LEN) //还可以接收数据
{
TIM_SetCounter(TIM4,0); //计数器清空
if(USART1_RX_STA==0) //使能定时器7的中断
{
TIM_Cmd(TIM4,ENABLE); //使能定时器7
}
USART1_RX_BUF[USART1_RX_STA++]=Res; //记录接收到的值
}
else
{
USART1_RX_STA|=1<<15; //强制标记接收完成
}
}
// USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}
}