初级会员
- 积分
- 113
- 金钱
- 113
- 注册时间
- 2016-9-12
- 在线时间
- 26 小时
|
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]
|
|