OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4539|回复: 10

为什么我的stm32最小系统不能控制GSM模块给我指定的手机号码发短信?

[复制链接]

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2017-1-12
在线时间
9 小时
发表于 2017-2-3 15:26:22 | 显示全部楼层 |阅读模式
大家好,刚接触stm32,老师要求我们将通讯模块弄清楚,买的A6mini模块,然后我按照淘宝店给的资料将A6的UTX接到了最小系统的PA3,URX接到了最小系统的PA2引脚,然后将例程发送中文短信烧入了最小系统,也更改了例程中的手机号和短信内容,但是不知道为什么没有收到发出的短信,不知道哪位大神能指点我一下,谢谢  麻烦了[img]file:///D:\Documents\Tencent Files\944167727\Image\Group\[P`{I2NSEO@}H)K`J{54W%J.png[/img](例程不知道能不能发出来)

QQ图片20170203141646.png
新建文件夹IMG_20170203_140820.jpg
新建文件夹IMG_20170203_140827.jpg
新建文件夹IMG_20170203_141152.jpg
新建文件夹IMG_20170203_141158.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2017-1-12
在线时间
9 小时
 楼主| 发表于 2017-2-3 15:29:57 | 显示全部楼层
#include "stm32f10x.h"
#include "usart.h"
#include "Led.h"
#include "SysTick.h"
#include "timer.h"
#include "string.h"


#define Buf2_Max 200                                           //串口2缓存长度
/*************        本地常量声明        **************/
static char *content="0011000D91685188299405F40008AA0A679C4E9179D16280000A";//发送短信内容
/************************短信内容解析**************************************/
/*
   //短信中心号(倒序)      目标手机(倒序)         短信内容(测试已经完成)
     8613800756500F          8613798985989F         
0891 683108706505F0 11000D91 683197985889F9 0008AA0C 6D4B8BD55DF27ECF5B8C6210
*/
/*************  本地变量声明        *********************************************/
char Uart2_Buf[Buf2_Max]; //串口2接收缓存
u8 Times=0,First_Int = 0,shijian=0;
vu8 Timer0_start;        //定时器0延时启动计数器

/*************        本地函数声明        **************/
void CLR_Buf2(void);
u8 Find(char *a);
void Second_AT_Command(char *b,char *a,u8 wait_time);
void Wait_CREG(void);
void Set_Pdu_Mode(void);//设置短信模式PDU
void Send_Pdu_Sms(void);//发送一条中文短信
/*************  外部函数和变量声明*****************/




/*******************************************************************************
* 函数名 : main
* 描述   : 主函数
* 输入   :
* 输出   :
* 返回   :
* 注意   : 串口2负责与MG323模块通信,串口1用于串口调试,可以避免在下载程序时数据
                                         还发送到模块
*******************************************************************************/
int main(void)
{
        SysTick_Init_Config();
        GPIO_Config();
       
        USART2_Init_Config(115200);
        Timer2_Init_Config();

        Wait_CREG();    //查询等待模块注册成功

        Set_Pdu_Mode();//设置短信为PDU模式
  Send_Pdu_Sms();//发送一条短消息
        while(1)
        {
           ;
        }
}

/*******************************************************************************
* 函数名  : USART2_IRQHandler
* 描述    : 串口1中断服务程序
* 输入    : 无
* 返回    : 无
* 说明    :
*******************************************************************************/
void USART2_IRQHandler(void)                       
{
                        u8 Res=0;
                        Res =USART_ReceiveData(USART2);
                        Uart2_Buf[First_Int] = Res;            //将接收到的字符串存到缓存中
                        First_Int++;                                        //缓存指针向后移动
                        if(First_Int > Buf2_Max)                       //如果缓存满,将缓存指针指向缓存的首地址
                        {
                                First_Int = 0;
                        }   
}        

/*******************************************************************************
* 函数名  : TIM2_IRQHandler
* 描述    : 定时器2中断断服务函数
* 输入    : 无
* 输出    : 无
* 返回    : 无
* 说明    : 无
*******************************************************************************/
void TIM2_IRQHandler(void)   //TIM3中断
{
        static u8 flag =1;

        if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
        {
               
                TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //清除TIMx更新中断标志
               
                if(Timer0_start)
                Times++;
                if(Times > shijian)
                {
                        Timer0_start = 0;
                        Times = 0;
                }
       
                if(flag)
                {
                        LED4_ON();
                        flag=0;
                }
                else
                {
                        LED4_OFF();
                        flag=1;
                }
        }       
}

/*******************************************************************************
* 函数名 : CLR_Buf2
* 描述   : 清除串口2缓存数据
* 输入   :
* 输出   :
* 返回   :
* 注意   :
*******************************************************************************/
void CLR_Buf2(void)
{
        u16 k;
        for(k=0;k<Buf2_Max;k++)      //将缓存内容清零
        {
                Uart2_Buf[k] = 0x00;
        }
    First_Int = 0;              //接收字符串的起始存储位置
}

/*******************************************************************************
* 函数名 : Find
* 描述   : 判断缓存中是否含有指定的字符串
* 输入   :
* 输出   :
* 返回   : unsigned char:1 找到指定字符,0 未找到指定字符
* 注意   :
*******************************************************************************/

u8 Find(char *a)
{
  if(strstr(Uart2_Buf,a)!=NULL)
            return 1;
        else
                        return 0;
}

/*******************************************************************************
* 函数名 : Second_AT_Command
* 描述   : 发送AT指令函数
* 输入   : 发送数据的指针、希望接收到的应答、发送等待时间(单位:S)
* 输出   :
* 返回   :
* 注意   :
*******************************************************************************/

void Second_AT_Command(char *b,char *a,u8 wait_time)         
{
        u8 i;
        char *c;
        c = b;                                                                                //保存字符串地址到c
        CLR_Buf2();
  i = 0;
        while(i == 0)                    
        {
                if(!Find(a))
                {
                        if(Timer0_start == 0)
                        {
                                b = c;                                                        //将字符串地址给b
                                for (; *b!='\0';b++)
                                {
                                        while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET);
                                        USART_SendData(USART2,*b);
                                }
                                UART2_SendLR();       
                                Times = 0;
                                shijian = wait_time;
                                Timer0_start = 1;
                   }
    }
          else
                {
                        i = 1;
                        Timer0_start = 0;
                }
        }
        CLR_Buf2();
}

/*******************************************************************************
* 函数名 : Set_Pdu_Mode
* 描述   : 设置短信为PDU文本模式
* 输入   :
* 输出   :
* 返回   :
* 注意   :
*******************************************************************************/
void Set_Pdu_Mode(void)
{
        Second_AT_Command("ATE0","OK",3);                                                                                  //取消回显       
        Second_AT_Command("AT+CMGF=0","OK",3);                                                                //设置PDU模式       
       
}
/*******************************************************************************
* 函数名 : Send_Pdu_Sms
* 描述   : 发送PDU文本短信
* 输入   :
* 输出   :
* 返回   :
* 注意   :
*******************************************************************************/
void Send_Pdu_Sms(void)
{

        Second_AT_Command("AT+CMGS=25",">",3); //发送数据长度:25(具体的计算方法看串口调试比较)接收到“>”才发送短信内容
        UART2_SendString(content);     //发送短信内容
        USART_SendData(USART2 ,0X1A);  //发送结束符
  UART2_SendLR();
}

/*******************************************************************************
* 函数名 : Wait_CREG
* 描述   : 等待模块注册成功
* 输入   :
* 输出   :
* 返回   :
* 注意   :
*******************************************************************************/
void Wait_CREG(void)
{
        u8 i;
        u8 k;
        i = 0;
        CLR_Buf2();
  while(i == 0)                               
        {
                CLR_Buf2();        
                UART2_SendString("AT+CREG?");   //查找模块是否注册成功
                UART2_SendLR();
                Delay_nMs(5000);                                                 
            for(k=0;k<Buf2_Max;k++)                             
            {
                        if(Uart2_Buf[k] == ':')
                        {
                                if(((Uart2_Buf[k+4] == '1')&&(Uart2_Buf[k+5] != '3'))||(Uart2_Buf[k+4] == '5'))  //说明模块已经注册成功
                                {
                                        i = 1;
                                  break;
                                }
                        }
                }
        }
}
回复 支持 反对

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2017-2-3 17:46:37 | 显示全部楼层
那能打电话吗,现在?
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2017-1-12
在线时间
9 小时
 楼主| 发表于 2017-2-3 18:48:26 | 显示全部楼层
ST-FAE-SALE 发表于 2017-2-3 17:46
那能打电话吗,现在?

用USB转串口连接电脑然后通过串口调试助手可以打电话也可以发短信。但是不能向程序中说的通过单片机来控制
回复 支持 反对

使用道具 举报

3

主题

6

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-9-28
在线时间
5 小时
发表于 2017-3-21 14:35:50 | 显示全部楼层
我也是同样的问题,我的程序是死在 等待注册成功那一块儿,同样求答案,楼主现在你的问题解决了吗。
回复 支持 反对

使用道具 举报

3

主题

6

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-9-28
在线时间
5 小时
发表于 2017-3-21 14:36:22 | 显示全部楼层
我也是同样的问题,我的程序是死在 等待注册成功那一块儿,同样求答案,楼主现在你的问题解决了吗。
回复 支持 反对

使用道具 举报

骑驴 该用户已被删除
发表于 2017-3-30 16:47:22 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2017-5-22
在线时间
0 小时
发表于 2017-5-22 22:39:29 | 显示全部楼层
楼主你的问题解决了吗,现在我也遇到这个问题了?有资料可以分享下马
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2017-1-12
在线时间
9 小时
 楼主| 发表于 2017-8-28 17:33:17 | 显示全部楼层
骑驴 发表于 2017-3-30 16:47
楼主你那资料例程能给我一份吗,我试试,

好的  不好意思 才回国  马上发
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2017-1-12
在线时间
9 小时
 楼主| 发表于 2017-8-28 17:33:28 | 显示全部楼层
潜行者 发表于 2017-3-21 14:36
我也是同样的问题,我的程序是死在 等待注册成功那一块儿,同样求答案,楼主现在你的问题解决了吗。

邮箱给我一个吧
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2017-1-12
在线时间
9 小时
 楼主| 发表于 2017-8-28 17:38:48 | 显示全部楼层
潜行者 发表于 2017-3-21 14:36
我也是同样的问题,我的程序是死在 等待注册成功那一块儿,同样求答案,楼主现在你的问题解决了吗。

因为头码和尾码的原因  发送中文,要转换必须每次去计算数据长度
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-26 08:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表