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

原创 2017年08月25日 14:59:55

安信可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发生变化那发送的指令可能也会发生变化。

安信可 A7模块——GPRS之AT命令

AT 测试GPRS模块是否连接完好 >AT/*成功返回OK*/ AT+CPIN:检测手机SIM卡是否安装好 >AT+CPIN? //检测手机SIM卡是否安装好 +CPIN:...
  • Edroid1530
  • Edroid1530
  • 2017年05月30日 15:43
  • 914

安信可-A7模块——GPRS基本AT命令

所使用的模块是安信可开发的A7,该模块整合了GPS和GPRS的功能,先来学习一下GPRS使用AT命令进行打电话、接电话以及收发短信。模块说明: 使用TTL电平,串口连接接线好,插入SIM卡(...
  • baweiyaoji
  • baweiyaoji
  • 2017年05月31日 21:13
  • 2844

安信可A7模块GPRS功能测试及初步学习AT指令

一、GPRS简介 GSM模块,是将GSM射频芯片、基带处理芯片、存储器、功放器件等集成在一块线路板上,具有独立的操作系统、GSM射频处理、基带处理并提供标准接口的功能模块。GSM模块根据其提供的数据传...
  • fml1997
  • fml1997
  • 2017年06月08日 17:27
  • 1080

安信可A9(GPRS模块)快速联网,使用机智云开发IOT应用教程

前言 安信可 A9/A9G GPRS(GPS) 模块因为有GPRS,相比WIFI,它可以随时随地联网,实现24小时稳定在线,不受地理位置限制,而且提供基站定位和GPS定位功能。提供AT固件使用起来也非...
  • gizwits_csdn
  • gizwits_csdn
  • 2018年01月03日 10:40
  • 102

安信可A7模块介绍,以及GPRS基本测试命令

一、模块介绍:           电源开关打开后,按PWR_KEY(模块启动按钮)按键1s以上启动内核(类同于手机开机)。 二、模块连线        首先,我们在PC上调试,用我们的串口线...
  • qicheng777
  • qicheng777
  • 2017年05月14日 16:16
  • 2157

安信可A7模块 GPRS/GPS使用教程

一、引脚接线 A7模块包含了GPRS(网络数据传输)和GPS(卫星定位)两部分,可通过串口用AT指令进行控制操作。 A7模块引脚卡槽图如下,测试时USB转串口线与A7模块接线对应关系应为...
  • Leytton
  • Leytton
  • 2017年07月06日 17:23
  • 3095

GPRS模块SIM9001发送短信(发送长短信),包括PDU和text两种模式

GPRS模块,是具有GPRS数据传输功能的GSM模块。GPRS模块就是一个精简版的手机,集成GSM通信的主要功能于一块电路板上,具有发送短消息、通话、数据传输等功能。GPRS模块相当于手机的核心部分,...
  • lovehere33
  • lovehere33
  • 2014年09月11日 08:46
  • 4193

安信可-A7模块——GPS显示坐标信息解读

上一篇博文记录了A7的GPRS功能,并且使用AT命令进行了打电话、发短信。现在学习一下A7的GPS应用。 GPS(全球定位系统):利用GPS定位卫星,在全球范围内实时进行定位、导航的系统。 NME...
  • baweiyaoji
  • baweiyaoji
  • 2017年06月04日 16:42
  • 1514

关于乐鑫,安信可固件使用问题,说明汇总

安信可作为乐鑫的客户,二次开发了不少文档(基于乐鑫),也开发了基于eclipse的IDE编辑ESP8266的固件(乐鑫官网的固件编辑需要在Linux系统下),用在Windows上,极为方便了我们的开发...
  • SimpleSwing
  • SimpleSwing
  • 2017年08月09日 16:33
  • 688

安信可-A7模块——C语言编程实现GPS功能

上一篇博文整理学习了有关串口通信、串口编程的一些基本知识。本篇将通过编程来获取、解析、转换GPS接收机接收的信息。 我们将在fl2440开发板上实现该功能。一、A7与开发板连线我使用的是USB转TT...
  • baweiyaoji
  • baweiyaoji
  • 2017年06月07日 17:23
  • 1396
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:安信可A6模块短信模式的配置
举报原因:
原因补充:

(最多只允许输入30个字)