OpenEdv-开源电子网

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

SIM900A短信发送 ,发送0X1A,回复错误,导致发送失败

[复制链接]

2

主题

5

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2018-11-22
在线时间
2 小时
发表于 2018-11-26 13:58:04 | 显示全部楼层 |阅读模式
5金钱
我用的stm32f4vet6,在调试短信发送的时候,发现串口发送完0X1A后一直得不到正确的回复,最终导致失败。在电脑上调试SIM900A的时候没问题。
    if(key==14&&pohnenumlen)                //执行发送短信
                {  
                    Show_Str(0,70,170,90,"正在发送",16,0);            //显示正在发送        
                    smssendsta=1;         
                    sim900a_unigbk_exchange(phonebuf,p,1);                //将电话号码转换为unicode字符串
                    sim900a_unigbk_exchange((u8*)sim900a_test_msg,p1,1);//将短信内容转换为unicode字符串.
                    sprintf((char*)p2,"AT+CMGS=\"%s\"",p);
                    if(sim900a_send_cmd(p2,">",200)==0)                    //发送短信命令+电话号码
                    {     
                        Show_Str(0,70,170,90,"正在发送",16,0);                                                                              
                        u3_printf("%s",p1);                                 //发送短信内容到GSM模块
                         if(sim900a_send_cmd((u8*)0X1A,"+CMGS:",1000)==0)smssendsta=2;//发送结束符,等待发送完成(最长等待10秒钟,因为短信长了的话,等待时间会长一些)
                    }  
                    if(smssendsta==1)Show_Str(0,70,170,90,"发送失败",16,0);    //显示状态
                    else Show_Str(0,70,170,90,"发送成功",16,0);                //显示状态   
                    USART3_RX_STA=0;
                }


发送完0X1A就一直在等待回复,但最后没有得到正确回复
    if(ack&&waittime)        //需要等待应答
    {
        while(--waittime)    //等待倒计时
        {
            delay_ms(10);
            if(USART3_RX_STA&0X8000)//接收到期待的应答结果
            {
                if(sim900a_check_cmd(ack))break;//得到有效数据
                USART3_RX_STA=0;
            }
        }
        if(waittime==0)res=1;
    }

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

113

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3321
金钱
3321
注册时间
2017-12-14
在线时间
406 小时
发表于 2018-11-26 15:16:10 | 显示全部楼层
把这句
if(sim900a_send_cmd((u8*)0X1A,"+CMGS:",1000)==0)
改成
if(sim900a_send_cmd((u8*)0X1A,"OK",1000)==0)
就可以了
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2018-11-26
在线时间
3 小时
发表于 2018-11-26 16:36:09 来自手机 | 显示全部楼层
试过了,不行。
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2018-11-26
在线时间
3 小时
发表于 2018-11-26 17:55:01 来自手机 | 显示全部楼层
得到的结果是error
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2018-11-26
在线时间
3 小时
发表于 2018-11-26 20:22:29 来自手机 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-11-27 02:26:00 | 显示全部楼层
检测下stm32串口发出来的数据,是否正常?
别接SIM800C,直接接电脑串口
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-10-11
在线时间
6 小时
发表于 2018-11-27 12:34:07 | 显示全部楼层
if(sim900a_send_cmd(p2,">",200)==0)                    //发送短信命令+电话号码
                    {     
                        Show_Str(0,70,170,90,"正在发送",16,0);                                                                              
                        u3_printf("%s",p1);               
----------------------------------------
你要确信:p2,p1最末端后面加上截止符"0"。如果没有,1. p2收不到回复">"    2. p1发出后,收到error。谢谢
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2018-11-22
在线时间
2 小时
 楼主| 发表于 2018-11-27 22:25:52 | 显示全部楼层
正点原子 发表于 2018-11-27 02:26
检测下stm32串口发出来的数据,是否正常?
别接SIM800C,直接接电脑串口

原子哥,这是测试代码和串口调试图
kkk.PNG
lll.PNG
回复

使用道具 举报

7

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2018-3-6
在线时间
39 小时
发表于 2018-11-28 15:32:27 | 显示全部楼层
不建议你那样发0x1A  这种单字节的,你直接往寄存器丢数据可能会不一样,你可以试一试
回复

使用道具 举报

25

主题

120

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
346
金钱
346
注册时间
2018-8-10
在线时间
92 小时
发表于 2019-4-23 19:55:51 | 显示全部楼层
千里马73 发表于 2018-11-27 12:34
if(sim900a_send_cmd(p2,">",200)==0)                    //发送短信命令+电话号码
                    ...

但是p2 p1是指针来的,不需要'\0'截止符。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-11 05:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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