华为MG323驱动资料.docx

上传人:b****2 文档编号:1791426 上传时间:2022-10-24 格式:DOCX 页数:16 大小:18.42KB
下载 相关 举报
华为MG323驱动资料.docx_第1页
第1页 / 共16页
华为MG323驱动资料.docx_第2页
第2页 / 共16页
华为MG323驱动资料.docx_第3页
第3页 / 共16页
华为MG323驱动资料.docx_第4页
第4页 / 共16页
华为MG323驱动资料.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

华为MG323驱动资料.docx

《华为MG323驱动资料.docx》由会员分享,可在线阅读,更多相关《华为MG323驱动资料.docx(16页珍藏版)》请在冰豆网上搜索。

华为MG323驱动资料.docx

华为MG323驱动资料

//固件库相关头文件

#include"stm32f10x.h"

//MDK头文件

#include

#include

//自定义头文件

#include"gprs.h"

#include"usart.h"

#include"flash.h"

//FreeRTOS相关头文件

#include"FreeRTOS.h"

#include"task.h"

#include"queue.h"

//模块供电及复位管脚定义

//控制LM2576ADJ给模块上电或断电

#definePWRONGPIO_ResetBits(GPIOB,GPIO_Pin_13);

#definePWROFFGPIO_SetBits(GPIOB,GPIO_Pin_13);

//开机后,RSTON>10ms模块复位

#defineRSTONGPIO_SetBits(GPIOB,GPIO_Pin_14);

#defineRSTOFFGPIO_ResetBits(GPIOB,GPIO_Pin_14);

//模块上电后,在关机状态TERMOFF变成TERMON1秒后可开机,开机状态TERMOFF变成TERMON1秒可关机,保持20秒又会开机

#defineTERMONGPIO_SetBits(GPIOB,GPIO_Pin_15);

#defineTERMOFFGPIO_ResetBits(GPIOB,GPIO_Pin_15);

//GprsInfo.state状态定义

#defineSTATE_BEGIN0//开机流程第1次GPRS_Reset时从此状态开机

#defineSTATE_POWER_ON1

#defineSTATE_TERM_ON2

#defineSTATE_RESET3//模块复位流程非第1次GPRS_Reset时从此状态复位

//#defineSTATE_PWRKEY_HIGH4

#defineSTATE_SEND_AT4//AT

#defineSTATE_RECEIVE_AT5

#defineSTATE_SEND_ATE06//ATE0关闭回显

#defineSTATE_RECEIVE_ATE07

#defineSTATE_SEND_ATI8//ATI查询产品信息

#defineSTATE_RECEIVE_ATI9

#defineSTATE_SEND_CPIN10//CPIN获取SIM卡PIN密码

#defineSTATE_RECEIVE_CPIN11

#defineSTATE_SEND_CGSN12//CGSN查询IMEI号

#defineSTATE_RECEIVE_CGSN13

#defineSTATE_SEND_CSQ14//CSQ查询信号强度

#defineSTATE_RECEIVE_CSQ15

#defineSTATE_SEND_COPS16//COPS查询运营商信息

#defineSTATE_RECEIVE_COPS17

#defineSTATE_SEND_CGATT18//CGATT查询GPRS服务状态

#defineSTATE_RECEIVE_CGATT19

#defineSTATE_SEND_SICS20//SICS设置Internet连接类型(GPRS)

#defineSTATE_RECEIVE_SICS21

#defineSTATE_SEND_SISS_TYPE22//SISS建立Internet服务类型(Socket)

#defineSTATE_RECEIVE_SISS_TYPE23

#defineSTATE_SEND_SISS_ADDR24//SISS设置UDP服务地址根据网址建立连接

#defineSTATE_RECEIVE_SISS_ADDR25

#defineSTATE_SEND_SISO26//SISO打开UDP服务

#defineSTATE_RECEIVE_SISO27

#defineSTATE_IDLE28//GPRS服务已经成功连接并空闲

#defineSTATE_SEND_SISW_LEN30//SISW设置发包长度

#defineSTATE_RECEIVE_SISW_LEN31

#defineSTATE_SEND_SISW_DATA32//发送数据包

#defineSTATE_RECEIVE_SISW_DATA33

#defineSTATE_SEND_SISR34//SISR读取数据包

#defineSTATE_RECEIVE_SISR35

//定义AT命令表

#defineCMD_AT"AT\r"

#defineCMD_ATE0"ATE0\r"

#defineCMD_ATI"ATI\r"

#defineCMD_CPIN"AT+CPIN?

\r"

#defineCMD_CGSN"AT+CGSN\r"

#defineCMD_CSQ"AT+CSQ\r"

#defineCMD_COPS"AT+COPS?

\r"

#defineCMD_CGATT"AT+CGATT?

\r"

#defineCMD_SICS"AT^SICS=0,conType,GPRS0\r"

#defineCMD_SISS_TYPE"AT^SISS=0,srvType,Socket\r"

#defineCMD_SISS_ADDR"AT^SISS=0,address,sockudp:

//"

#defineCMD_SISO"AT^SISO=0\r"

#defineCMD_SISW"AT^SISW=0,"

#defineCMD_SISR"AT^SISR=0,256\r"

//定义AT返回命令表

#defineRET_OK"OK\r\n"

#defineRET_ATI"MG323\r\n"

#defineRET_SENDLEN"^SISW:

0"

#defineRET_RCVDATA"^SISR:

0,1\r\n"

#defineRET_EWT"EWT"

#defineRET_CSQ"+CSQ:

"

#defineRET_ERROR"ERROR"

#defineGPRS_DEBUG

//#defineServerAddr":

10000\r"

//#defineServerAddr"221.6.15.222:

3030\r"

#definePACKETMAXSIZE256

struct_GPRS_INFO_STRUCT_

{

u8state;

u8rxState;//接收状态,0允许读取串口数据,1上次的数据还没有被应用程序取走,不能解析新数据

u16rxBytes;//收到模块的字节数

u8txTimer;//AT命令发送计时器,超时重发。

u16LinkTimer;//服务器连接计时器,超时则重启GPRS模块

u8rxATBuf[PACKETMAXSIZE];//AT命令接收缓存

u8txATBuf[PACKETMAXSIZE];//AT命令发送缓存

u8txDATABuf[PACKETMAXSIZE];//数据包发送缓存

u8*rxPacketPtr;//数据包的指针

u16rxPacketLen;//数据包的字节数

u8txLen;

u8txHoldTime;

u8rxflg;//0无数据包到达1有数据包到达

}GprsInfo;

#ifdefGPRS_DEBUG

#defineGPRS_DEBUG_MAXSIZE256

struct_GPRS_DEBUG_

{

u16len;

u8buf[GPRS_DEBUG_MAXSIZE];

}GprsDebug;

u32counter=0;

#endif

voidGPRS_Reset(u8rstnum)

{

#ifdefGPRS_DEBUG

if(GprsDebug.len+13

{

sprintf(GprsDebug.buf+GprsDebug.len,"GPRS_Reset:

%d\n",rstnum);

GprsDebug.len+=13;

}

#endif

memset((u8*)&GprsInfo,0,sizeof(GprsInfo));

if(rstnum==1)

GprsInfo.state=STATE_BEGIN;

else

GprsInfo.state=STATE_RESET;

}

u16CommandSend(u8*ptr,u16len)

{

GprsInfo.txTimer=20;//超时重发时间20*50ms

#ifdefGPRS_DEBUG

if(GprsDebug.len+len+2

{

memcpy(GprsDebug.buf+GprsDebug.len,"S:

",2);

GprsDebug.len+=2;

memcpy(GprsDebug.buf+GprsDebug.len,ptr,len);

GprsDebug.len+=len;

}

#endif

returnUSART1_Write(ptr,len);

}

voidGPRS_Transmit_Process(void)

{

switch(GprsInfo.state)

{

caseSTATE_BEGIN:

GprsInfo.state=STATE_POWER_ON;

GprsInfo.txHoldTime=0;

PWROFF;

TERMOFF;

RSTOFF;

break;

caseSTATE_POWER_ON:

if(!

GprsInfo.txHoldTime)

{

PWROFF;

TERMON;

GprsInfo.txHoldTime++;

}

else

{

GprsInfo.txHoldTime++;

if(GprsInfo.txHoldTime>20*1)//命令执行延时1秒

{

PWRON;

GprsInfo.state=STATE_TERM_ON;

GprsInfo.txHoldTime=0;

}

}

break;

caseSTATE_TERM_ON:

if(!

GprsInfo.txHoldTime)

{

TERMON;

GprsInfo.txHoldTime++;

}

else

{

GprsInfo.txHoldTime++;

if(GprsInfo.txHold

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1