时间仓促,大概记录一下,以后详细贴上C程序
----------------------------------简单查询--------------------------------
AT+CSQ //查看信号质量
+CSQ: 25,0
OK
AT+CREG? //查看GSM是否注册成功
+CREG: 0,1
OK
AT+CGREG? //查看GPRS是否注册成功
+CGREG: 0,1
OK
AT+CGATT? //查看GPRS附着状态
+CGATT: 1
OK
----------------------------------以下是重点-----------------------------
AT+SAPBR=3,1,"CONTYPE","GPRS" //设置网络参数
OK
AT+SAPBR=3,1,"APN","UNIWAP" //设置APN
OK
AT+SAPBR=1,1 //激活网络场景
OK
AT+SAPBR=2,1 //获取分配IP地址
+SAPBR: 1,1,"10.97.109.220"
OK
AT+CNTP="ntp1.aliyun.com",32 //设置NTP服务器地址,时区
OK
AT+CNTP //开启网络同步
OK
+CNTP: 1
AT+CCLK? //查询本地时间
+CCLK: "18/05/14,13:00:33+00"
OK
题外话,原本选的是交大NTP,发现没连上。。。。。。换成阿里云的就OK了,给阿里点个赞
另外,北京时区是东八区,我觉得应该是AT+CNTP="ntp1.aliyun.com",8
,可实际相差6小时,补加24后,得到正确时间,即AT+CNTP="ntp1.aliyun.com",32
,这里比较迷,路过的大哥指点一下,或者以后我明白了,再补充
C代码
extern u8 ABT_SyncTime(void)
{
if(sim900a_send_cmd((u8 *)"AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"",(u8 *)"OK",100))
return 1;
if(sim900a_send_cmd((u8 *)"AT+SAPBR=3,1,\"APN\",\"UNIWAP\"",(u8 *)"OK",500))
return 2;
sim900a_send_cmd((u8 *)"AT+SAPBR=1,1",(u8 *)"OK",200);
if(sim900a_send_cmd((u8 *)"AT+SAPBR=2,1",(u8 *)"OK",600))
return 4;
if(sim900a_send_cmd((u8 *)"AT+CNTP=\"ntp1.aliyun.com\",32",(u8 *)"OK",200))
return 5;
if(sim900a_send_cmd((u8 *)"AT+CNTP",(u8 *)"CNTP: 1",2000))
return 6;
return 0;
}
extern void ABT_GetLocalTime(void)
{
char *timePtr = NULL;
/*
if(sim900a_send_cmd((u8 *)"AT+CCLK?",(u8 *)"CCLK:",2000))
timePtr = strstr(USART2_RX_BUF,(const char *)"CCLK:");
*/
sim900a_send_cmd((u8 *)"AT+CCLK?",(u8 *)"CCLK:",2000);
timePtr = strstr((const char*)USART2_RX_BUF,(const char*)"CCLK:");
G_LocalTime.ALT_year = 2000 + 10*(timePtr[7] - '0') + timePtr[8] - '0';
G_LocalTime.ALT_month = 10*(timePtr[10] - '0') + timePtr[11] - '0';
G_LocalTime.ALT_day = 10*(timePtr[13] - '0') + timePtr[14] - '0';
G_LocalTime.ALT_hour = 10*(timePtr[16] - '0') + timePtr[17] - '0';
G_LocalTime.ALT_minute = 10*(timePtr[19] - '0') + timePtr[20] - '0';
G_LocalTime.ALT_second = 10*(timePtr[22] - '0') + timePtr[23] - '0';
}
注释部分也比较迷,真的没道理啊,试了不下于20次,还是不行。时间紧,就暂时用注释后的代码了。
结构体定义部分
struct ABT_LocalTime_TypeDef{
u16 ALT_year;
u8 ALT_month;
u8 ALT_day;
u8 ALT_hour;
u8 ALT_minute;
u8 ALT_second;
};
RX2_BUF收到的数据
图1
timePtr指针指向RX2_BUF的子串位置
图2
USART2_RX_BUF : 0X20000448,
timePtr:0X20000454,
相差12,
在图1可见,CCLK:起始位置正是12,以后通过timePtr指针索引数据内容即可