OpenEdv-开源电子网

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

关于SIM900A GSM模块收取短信的程序问题,请大神指点下

[复制链接]

20

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-8-1
在线时间
0 小时
发表于 2013-9-30 17:27:41 | 显示全部楼层 |阅读模式

这个是收短信的函数,可是显示出来的p1是整段数据(号码,时间和内容),好像没有运行过strstr这个函数似的。到了这一步就停止了,没有往下执行,请大神指导下我程序的不足。
void read_msgs(void)
{
    u8 *p,*p1;
   p=mymalloc(SRAMIN,200);
    LED1=1;
LED0=1;  
    usart2flag=0;
USART2_RX_STA=0;
while(1)
{
if(usart2flag==1)   //在定时器加的一个标记位
{  
usart2flag=0;
p1=(u8*)strstr((const char*)(USART2_RX_BUF),",");   //从串口收到的数据中提取出当前短信存到哪个位置
sprintf((char*)p,"AT+CMGR=%s",p1+1);
Show_Str_Mid(0,30,p,16,240);      
if(sim900a_send_cmd(p,"+CMGR:",200)==0)
{
p=0;
p1=0;
p1=(u8*)strstr((const char*)(USART2_RX_BUF),"\r");    //寻找回车符
Show_Str(30,105,180,75,p1+2,12,0);                            //显示短信内容的UNICODE码
sim900a_unigbk_exchange(p1+2,p,0);                            //unicode码转GBK       
Show_Str(30+30,105,180,75,p,12,0);                            //显示短信内容
}
USART2_RX_STA=0;
p=0;
p1=0;    
 }
  myfree(SRAMIN,p);
}
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

105

主题

522

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1386
金钱
1386
注册时间
2012-10-23
在线时间
97 小时
发表于 2013-10-1 08:09:21 | 显示全部楼层
前提是已经收到cnmi提示。  strstr返回的地址应该作一个判断,是否为空
回复 支持 反对

使用道具 举报

20

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-8-1
在线时间
0 小时
 楼主| 发表于 2013-10-1 10:50:20 | 显示全部楼层
回复【2楼】miaoguoqiang:
---------------------------------
能收到。前面那个判断存储位置的strstr能执行,后面提取内容那个不能。strstr这函数是从字符串str1中查找是否有字符串str2,如果有,从str1中的str2位置起,返回str1中str2起始位置的指针,如果没有,返回null。有输出值的。
第二个strstr我寻找回车符,不是就能把短信内容给提取出来么?原子哥也是这样做的吧。
或者兄弟你能指点一下么?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 15:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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