我用的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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
if(sim900a_send_cmd((u8*)0X1A,"+CMGS:",1000)==0)
改成
if(sim900a_send_cmd((u8*)0X1A,"OK",1000)==0)
就可以了
别接SIM800C,直接接电脑串口
一周热门 更多>