您的位置:首页 > 其它

安信可A6模块短信模式的配置

2017-08-25 14:59 225 查看

安信可A6模块短信模式的配置

前段时间搞了下这个,配置的时候碰到很多问题。

最后上电初始化时是这样配置的

AT                          //第一条为无效指令,A6模块根据这次数据传输调整波特率
AT+GMGD=1,4                 //删除存储的所有短信
AT+CSMS=0,1,1,1             //选择短消息服务
AT+CNMI=2,2,0,1,1           //配置短信接收模式
AT+CMGF=1                   //设置短信格式为text
AT+CSCS="GSM"               //设置短信编码用GSM
AT+CPMS="SM","SM","SM"      //选择短消息内存为SM卡


附上模块程序(STM32F103C8T6)

//gprs_ga6.h
#ifndef __GPRS_GA6_H__
#define __GPRS_GA6_H__

#include "usart.h"

#define GPRS_GA6_TRUE   1
#define GPRS_GA6_FALSE  0
#define GPRS_GA6_NULL   0

extern void GPRS_GA6_Init(void);
//extern void GPRS_GA6_Recive_Unit(void);
//extern int GPRS_GA6_SMSMODE_Loop_Init(u16 time);
extern u8 GPRS_GA6_InitComplete_Flag;

#endif


//gprs_ga6.c
#include "gprs_ga6.h"
//A6模块初始化完成标志
u8 GPRS_GA6_InitComplete_Flag = GPRS_GA6_FALSE;

//送一个字节
u8 GPRS_GA6_Send_Byte(u8 data) {
USART1_SendData(data);
return GPRS_GA6_TRUE;
}

//送一组字节 '\0'结尾
u8 GPRS_GA6_Send(u8* data) {
USART1_SendString(data);
return GPRS_GA6_TRUE;
}

//A6接收检查子程序 比较两个byte数组
//recive-接收内容 check-比对内容
u8 GPRS_GA6_Recive_Check(u8* recive, u8* check) {
int i=0;
int check_len = 0;
int cmp_pos = 0;

for (check_len = 0; check_len < USART1_REV_BUFFER_LEN; check_len ++) {
if (check[check_len] == '\0') {
break;
}
}

if (check_len <= 1) {
return GPRS_GA6_TRUE;
}

for (i=0; i < USART1_REV_BUFFER_LEN; i++) {
if (recive[i] == '\0') {
break;
}
if (recive[i] == check[cmp_pos]) {
cmp_pos += 1;
if (cmp_pos >= check_len) {
return GPRS_GA6_TRUE;
}
} else {
cmp_pos = 0;
}
}

if (cmp_pos >= check_len) {
return GPRS_GA6_TRUE;
} else {
return GPRS_GA6_FALSE;
}
}

//A6接收子程序 check-检查比对内容
u8 GPRS_GA6_Recive(u8* check) {
u8* recive_buf;
if (USART1_RevBuffer_Check()) {
recive_buf = USART1_RevBuffer_Pop();
if (GPRS_GA6_Recive_Check(recive_buf, check) == GPRS_GA6_TRUE) {
return GPRS_GA6_TRUE;
} else {
return GPRS_GA6_FALSE;
}
} else {
return GPRS_GA6_NULL;
}
}

//A6发送一个命令 并检查返回
u8 GPRS_GA6_AT_Cmd(u8* cmd, u8* check) {
static int prc = 0;
switch (prc) {
case 0:
if (GPRS_GA6_Send(cmd) == GPRS_GA6_TRUE) {
prc = 1;
}
break;
case 1:
if (GPRS_GA6_Recive(check) == GPRS_GA6_TRUE) {
prc = 2;
}
break;
case 2:
prc = 0;
return GPRS_GA6_TRUE;
default:
prc = 0;
break;
}
return GPRS_GA6_FALSE;
}

//A6短信模式初始化
u8 GPRS_GA6_SMSMODE_Init(void) {
static int prc = -1;
static u16 time = 0;
while (1) {
switch (prc) {
case -1:
if (GPRS_GA6_AT_Cmd("AT\r\n", "")) {
time = 0;
prc = 0;
Delay_Nms(1000);
}
break;
case 0:
if (GPRS_GA6_AT_Cmd("AT+CMGD=1,4\r\n", "OK")) {
prc = 1;
time = 0;
Delay_Nms(100);
}
break;
case 1:
if (GPRS_GA6_AT_Cmd("AT+CSMS=0,1,1,1\r\n", "OK")) {
prc ++;
time = 0;
Delay_Nms(100);
}
break;
case 2:
if (GPRS_GA6_AT_Cmd("AT+CNMI=2,2,0,1,1\r\n", "OK")) {
prc ++;
time = 0;
Delay_Nms(100);
}
break;
case 3:
if (GPRS_GA6_AT_Cmd("AT+CMGF=1\r\n", "OK")) {
prc ++;
time = 0;
Delay_Nms(100);
}
break;
case 4:
if (GPRS_GA6_AT_Cmd("AT+CSCS=\"GSM\"\r\n", "OK")) {
prc ++;
time = 0;
Delay_Nms(100);
}
break;
case 5:
if (GPRS_GA6_AT_Cmd("AT+CPMS=\"SM\",\"SM\",\"SM\"\r\n", "OK")) {
prc ++;
time = 0;
GPRS_GA6_InitComplete_Flag = GPRS_GA6_TRUE;
Delay_Nms(100);
}
break;
default:
prc = -1;
return GPRS_GA6_TRUE;
}
if ((time++) >= 60000) {
time = 0;
prc = -1;
return GPRS_GA6_FALSE;
}
}
}

//A6短信模式循环初始化
u8 GPRS_GA6_SMSMODE_Loop_Init(u16 time) {
u16 i=0;
for (i=0; i<time; i++) {
if (GPRS_GA6_SMS_Init() == GPRS_GA6_TRUE) {
return GPRS_GA6_TRUE;
}
Delay_Nms(200);
}
return GPRS_GA6_FALSE;
}

//A6初始化子程序
void GPRS_GA6_Init(void) {
USART1_Init(115200);
Delay_Nms(500);
GPRS_GA6_SMSMODE_Loop_Init(10);
}


虽然现在能成功接收短信了,但如果之后新的模块的SDK发生变化那发送的指令可能也会发生变化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐