OpenEdv-开源电子网

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

短信自动回复

[复制链接]

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2015-11-8
在线时间
31 小时
发表于 2016-3-29 19:14:53 | 显示全部楼层 |阅读模式
1金钱
短信自动回复老是发送不全啊,原子哥求助
/SIM900A读短信测试
void sim900a_sms_read_test(void)
{
u8 *p,*p1,*p2;
u8 timex=0;
  u8 n;
u8 msgindex[3];
u8 msglen=0;
u8 msgmaxnum=0;  //短信最大条数
u8 key=0;
u8 smsreadsta=0; //是否在短信显示状态
p=mymalloc(200);//申请200个字节的内存
LCD_Clear(WHITE);
POINT_COLOR=RED;
// while(1)
// {
  
   
     if(sim900a_send_cmd("AT+CNMI=1","OK",200)==0)//读取短信
     {
      smsreadsta=1;        //标记有显示短信内容
           
            sim900a_sms_send_test();
            
         
     }else
     {
      Show_Str(30,75,200,12,"无短信内容!!!请检查!!",12,0);
      delay_ms(1000);
      LCD_Fill(30,75,239,75+12,WHITE);//清除显示
     }   
     USART1_RX_STA=0;
  if((timex%20)==0)LED0=!LED0;//200ms闪烁
  timex++;
  delay_ms(10);
  if(USART1_RX_STA&0X8000)sim_at_response(1);//检查从GSM模块接收到的数据
//}
myfree(p);
}
const u8* sim900a_test_msg="您好,这是一条测试短信 GSM模块发送,谢谢支持!";
//SIM900A发短信测试
void sim900a_sms_send_test(void)
{
u8 *p,*p1,*p2;
u8 phonebuf[20]="18896719575";   //号码缓存
u8 pohnenumlen=0;  //号码长度,最大15个数
u8 timex=0;
u8 key=0;
u8 smssendsta=0;  //短信发送状态,0,等待发送;1,发送失败;2,发送成功
p=mymalloc(100); //申请100个字节的内存,用于存放电话号码的unicode字符串
p1=mymalloc(300); //申请300个字节的内存,用于存放短信的unicode字符串
p2=mymalloc(100); //申请100个字节的内存 存放:AT+CMGS=p1
LCD_Clear(WHITE);  
POINT_COLOR=RED;
Show_Str_Mid(0,30,"ATK-SIM900A 发短信测试",16,240);         
Show_Str(30,50,200,16,"发送给:",16,0);   
Show_Str(30,70,200,16,"状态:",16,0);
Show_Str(30,90,200,16,"内容:",16,0);  
POINT_COLOR=BLUE;
Show_Str(30+40,70,170,90,"等待发送",16,0);//显示状态
Show_Str(30+40,90,170,90,(u8*)sim900a_test_msg,16,0);//显示短信内容  
kbd_fn_tbl[0]="发送";
kbd_fn_tbl[1]="返回";
while(1)
{

   if(smssendsta)
   {
    smssendsta=0;
    Show_Str(30+40,70,170,90,"等待发送",16,0);//显示状态
   }
     Show_Str(30+40,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)     //发送短信命令+电话号码
     {                       
      u2_printf("%s",p1);         //发送短信内容到GSM模块
       if(sim900a_send_cmd((u8*)0X1A,"+CMGS:",1000)==0)smssendsta=2;//发送结束符,等待发送完成(最长等待10秒钟,因为短信长了的话,等待时间会长一些)
     }  
     if(smssendsta==1)Show_Str(30+40,70,170,90,"发送失败",16,0); //显示状态
     else Show_Str(30+40,70,170,90,"发送成功",16,0);    //显示状态
     USART1_RX_STA=0;
   // }
   // if(key==15)break;
  // }
   phonebuf[pohnenumlen]=0;
   LCD_Fill(30+54,50,239,50+16,WHITE);
   Show_Str(30+54,50,156,16,phonebuf,16,0);   
  //}
  if((timex%20)==0)LED0=!LED0;//200ms闪烁
  timex++;
  delay_ms(10);
  if(USART1_RX_STA&0X8000)sim_at_response(1);//检查从GSM模块接收到的数据
}
myfree(p);
myfree(p1);
myfree(p2);
}

最佳答案

查看完整内容[请看2#楼]

仿真分析下. 另外,可以监控下串口数据.就能找到问题.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-3-29 19:14:54 | 显示全部楼层
仿真分析下. 另外,可以监控下串口数据.就能找到问题.
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2015-11-8
在线时间
31 小时
 楼主| 发表于 2016-3-30 22:25:55 | 显示全部楼层
正点原子 发表于 2016-3-29 19:14
仿真分析下. 另外,可以监控下串口数据.就能找到问题.

多谢啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 05:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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