一、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);
}
}