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

2019-07-20 02:23发布

我用的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;
    }

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
莫多拉
1楼-- · 2019-07-20 23:33
正点原子 发表于 2018-11-27 02:26
检测下stm32串口发出来的数据,是否正常?
别接SIM800C,直接接电脑串口

原子哥,这是测试代码和串口调试图
momo最可爱
2楼-- · 2019-07-21 04:47
不建议你那样发0x1A  这种单字节的,你直接往寄存器丢数据可能会不一样,你可以试一试
联合至尊
3楼-- · 2019-07-21 10:36
 精彩回答 2  元偷偷看……

一周热门 更多>