//sim900a發送命令后,檢測接收到的應答
//str:期待的應答結果
//返回值:0,沒有得到期待的應答結果
// 其他,期待應答結果的位置(str的位置)
u8* sim900a_check_cmd(u8 *str)
{
char *strx=0;
if(USART3_RX_STA&0X8000) //接收到一次數據了
{
USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加結束符
strx=strstr((const char*)USART3_RX_BUF,(const char*)str);
}
return (u8*)strx;
}
//向sim900a發送命令
//cmd:發送的命令字符串(不需要添加回車了),當cmd<0XFF的時候,發送數字(比如發送0X1A),大于的時候發送字符串.
//ack:期待的應答結果,如果為空,則表示不需要等待應答
//waittime:等待時間(單位:10ms)
//返回值:0,發送成功(得到了期待的應答結果)
// 1,發送失敗
u8 sim900a_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
u8 res=0;
USART3_RX_STA=0;
if((u32)cmd<=0XFF)
{
while((USART3->SR&0X40)==0);//等待上一次數據發送完成
USART3->DR=(u32)cmd;
}else u3_printf("%s\r\n",cmd);//發送命令
if(ack&&waittime) //需要等待應答
{
while(--waittime) //等待倒計時
{
delay_ms(10);
if(USART3_RX_STA&0X8000)//接收到期待的應答結果
{
if(sim900a_check_cmd(ack))break;//得到有效數據
USART3_RX_STA=0;
}
}
if(waittime==0)res=1;
}
return res;
}
|