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

来源:互联网 发布:淘宝卖的lv是正品吗 编辑:程序博客网 时间:2024/05/17 05:18

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

前段时间搞了下这个,配置的时候碰到很多问题。
最后上电初始化时是这样配置的

AT                          //第一条为无效指令,A6模块根据这次数据传输调整波特率AT+GMGD=1,4                 //删除存储的所有短信AT+CSMS=0,1,1,1             //选择短消息服务AT+CNMI=2,2,0,1,1           //配置短信接收模式AT+CMGF=1                   //设置短信格式为textAT+CSCS="GSM"               //设置短信编码用GSMAT+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   0extern 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发生变化那发送的指令可能也会发生变化。

原创粉丝点击