OpenEdv-开源电子网

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

求助STM32F103ZET6 串口2模拟GPRS 接收问题

[复制链接]

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2016-9-12
在线时间
26 小时
发表于 2016-9-22 09:41:16 | 显示全部楼层 |阅读模式
6金钱
我用的是M3528 DTU GPRS,在电脑串口上单独测试,发送AT指令及TCP测试,发送接收都没问题。
现在在STM32上测试,用串口2模拟给GPRS发送指令,GPRS返回TCP CONNECT OK、OK这些数据
我在串口调试助手里面只发送了一次TCP CONNECT OK之后,后面的程序都被执行了,
我把后面的OK改成OK1、OK2这样程序就没问题,请各位大大帮我看看,谢谢。


[mw_shl_code=applescript,true]//查找字符串,在s中查找t
//返 回 值: 1(t在s中的位置)成功 0失败
u8 LookFor_Str(u8 *s, u8 *t)
{
u8    *s_temp;      
u8    *m_temp;      
u8    *t_temp;     
if (s == 0 ||t == 0)
    return 0;
for (s_temp = s; *s_temp != '\0'; s_temp++)
{
  m_temp = s_temp;
  for (t_temp = t; *t_temp == *m_temp; t_temp++, m_temp++);
  if (*t_temp == '\0')
    return 1;
}
return 0;
}

  
         
///////////////////////////////////////////////////////////////////////////////////////////////         

void USART2_IRQHandler(void)   //串口2中断服务程序
{
   u8 res2;   
   if(USART2->SR&(1<<5))//接收到数据  判断括号里的值不为0则成立。RXNE位不为0 收到数据可以发出
        {   
      res2=USART_ReceiveData(USART2);
      USART_RX_BUF[USART_RX_STA]=res2;  
      USART_RX_STA++;
                                               
    }  
}


void Send_at_test(void)
{               
        u8 p;
        u8 temp;
       
    for(;;)
        {       
                p=LookFor_Str(USART_RX_BUF, "TCP CONNECT OK");  //接上GPRS IP端口没问题会返回TCP CONNECT OK
               
                if(p!=0) //接收到TCP CONNECT OK连接成功 LED2指示点亮
                {
                        LED2=0;       
                        delay_ms(1000);                       
                        p=0;
                        LED2=1;
                        temp=1;
                        break;
                 }       
        }       
        if(temp==1)
        {       
                USART_RX_STA=0;
                printf("+++");     //发送+++退出透传模式,进入发送指令模式,发送成功会返回OK
                delay_ms(1000);
                for(;;)
                {
                        p=LookFor_Str(USART_RX_BUF, "OK"); // 接收到OK,LED1指示灯点亮,表示可以发送下条指令
                        if(p!=0)
                        {
                                LED1=0;
                                delay_ms(5000);
                                LED1=1;
                                temp=2;
                                break;
                        }
                }
                if(temp==2)
                {
                        USART_RX_STA=0;
                        printf("\r\n");
                        printf("AT+CSQ\r\n");
                        delay_ms(1000);
                        for(;;)
                        {
                                p=LookFor_Str(USART_RX_BUF, "OK");
                                if(p!=0)
                                {
                                        LED0=0;
                                        delay_ms(5000);
                                        LED0=1;
                                        break;
                                }
                        }                       
                }
        }
}        [/mw_shl_code]

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

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2016-9-12
在线时间
26 小时
 楼主| 发表于 2016-9-22 09:42:14 | 显示全部楼层
我觉得应该是对比查找字符串函数的问题,应该要怎么修改下呢?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 08:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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