OpenEdv-开源电子网

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

小弟最近在研究stm32接收短信,并且通过接收的短信控制相应的动作,现在在通过串口向stm32发送数据调试,第一滴二次能够成功,但是第三次就不行了,求各位大神帮下研究下

[复制链接]

21

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2013-9-17
在线时间
29 小时
发表于 2014-5-14 21:37:18 | 显示全部楼层 |阅读模式
5金钱
#include"sim900a.h"
#include"delay.h"
#include "sys.h"
#include "usart.h"
#include "ds18b20.h"
#include "stm32f10x.h"
#include "stdio.h"
//#include"JIDIANQI.h"
#include"led.h"


u8 AT_Read[12]=""; //用来存储发送读取短信指令 

u8 numberbuf[3]=""; //用来保存短信条数 

char end_char = 0x1a;/*短信内容后加“0x1a”结尾,以16进制发送*/

u8 receiveready ;
u8 readcommendflag;
u8 send;
 
void sim900a_init()
{
      u8 i;
   LOOP: printf("at\r"); /*ati初始化sim900模块  */
delay_ms(5000);
printf("ate0\r");
delay_ms(5000);
  printf("AT+CSCS=\"GSM\"\r");      /*设置选择TE字符集为GSM7位默认字符*/
delay_ms(3000);
    printf("AT+CMGF=2,1\r");
delay_ms(5000);
printf("AT+CMGF=1\r");
delay_ms(50000);
if((USART_RX_BUF[0]=='O')&&(USART_RX_BUF[1]=='K')) //通过串口发送大写的OK 判断USART_RX_BUF的第一第二位是不是OK
      {
  for(i=0;i<200;i++)
              {
   USART_RX_BUF=0;
 
      }
USART_RX_STA=0;
     }
else{
for(i=0;i<200;i++)
              {
   USART_RX_BUF=0;
 
      }
USART_RX_STA=0;
goto LOOP;

   }

}


void receive_ready(void)
{
  u8 i;
if((USART_RX_BUF[3]=='T')&&USART_RX_BUF[4]=='I') //通过串口向stm发送数据,但是第4.5位必须是TI
{ // 此函数的功能是判断是否有新短信来,如果来的话就置位准备接受位标志为1
 receiveready=1;
  //如果不是新短信的指令,就舍弃,并将接收数组清零/
 }
 else{ 
 for(i=0;i<200;i++)
              {
   USART_RX_BUF=0;
 
      }
USART_RX_STA=0;
 } 
 }
  void read_message(void)
 {
   u8 i;
   delay_ms(1000);
   for(i=0;i<2;i++)
   {

      numberbuf=USART_RX_BUF;                                                  
}
  
   for(i=0;i<8;i++)
{
AT_Read=AT_CMGR;                                                      
}
   for(i=8;i<10;i++)
   {
AT_Read=numberbuf[i-8];                                                  
}
 
 
for(i=0;i<10;i++)
{
             USART_SendData(USART1,AT_Read);
 while(USART_GetFlagStatus(USART1, USART_FLAG_TC)!=SET);//发送读取短信的命令
            
             }


 
        for(i=0;i<200;i++)
              {
   USART_RX_BUF=0;
 
      }
USART_RX_STA=1;   //发送AT+CMGR=?,?代表短信储存所在位置
    readcommendflag=1;
}

 void message_read(void)//但是第三次发送open1等短信时就不能够接收到数据
{
   
  if((readcommendflag==1)&&(USART_RX_BUF[0]=='G')&&(USART_RX_BUF[1]=='R'))
  send=1;                                                                        
  }

 void readcommend(void)
 {  
  u8 i;
if(USART_RX_STA&8000==1)
delay_ms(1000);
{ USART_RX_STA=0;
        for(i=0;i<5;i=i+1)   //将短信内容中的指令部分截取出来放到
        {
  CommandBuf=USART_RX_BUF[i+5]; //CommandBuf数组中
          // CommandBuf=USART_RX_BUF[i+64];  
}

  if((CommandBuf[0]=='o')&&(CommandBuf[1]=='p')&&(CommandBuf[2]=='e')&&(CommandBuf[3]=='n'))
   {
      switch(CommandBuf[4])
          {
case  '1' : LED0=0;break;
case  '2' :  LED1=0;break;
// case  '3' : jidianqi=0;break;
case  '4' : send_message();break;
// default:flag;  //其他指令定义为错误操作
              //    break;   //置位错误操作位为1
                       }
}
else if((CommandBuf[0]=='s')&&(CommandBuf[1]=='h')&&(CommandBuf[2]=='u')&&(CommandBuf[3]=='t')) //判断指令是否为关闭电器指令

{
   switch(CommandBuf[4])
   {
    case '1': LED0=1;  //关闭继电器1
           break;
           case '2': LED1=1; //关闭继电器2
           break;
//            case '3': jidianqi=1; //关闭继电器3
   
   }
 
}
 
}
    
  }
主要的问题是第一 第二次能够接收数据,用料之后都吧USART_RX_BUF[]清零,以便接收下次数据,但是第三次,我发送open1的时候就接收不到程序了
我在吧我的MDK源文件附上 就大神帮主


ALIENTEK MINISTM32 实验22 DS18B20实验.zip

8.61 MB, 下载次数: 210

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

使用道具 举报

21

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2013-9-17
在线时间
29 小时
 楼主| 发表于 2014-5-14 21:45:30 | 显示全部楼层
我忘了 有部分我定义的数据我没加上
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-15 00:29:34 | 显示全部楼层
仿真跟踪看看。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

21

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2013-9-17
在线时间
29 小时
 楼主| 发表于 2014-5-15 10:06:18 | 显示全部楼层
怎么仿真跟踪啊 没用过、?????
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-8 07:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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