中级会员
- 积分
- 446
- 金钱
- 446
- 注册时间
- 2014-4-7
- 在线时间
- 53 小时
|
1金钱
小弟初学 sim800c 如有不当的地方请原谅,谢谢。
在学习原子sim800c的源码的时候看到 u8 sim800c_send_cmd(u8 *cmd,u8 *ack,u16 waittime) 这个函数
u8 sim800c_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(waittime==1100) //11s后读回串口数据(蓝牙测试用到)
{
Scan_Wtime = 11; //需要定时的时间
TIM7_SetARR(10000-1); //产生1S定时中断
}
if(ack&&waittime) //需要等待应答
{
while(--waittime) //等待倒计时
{
if(BT_Scan_mode) //蓝牙扫描模式下
{
res=KEY_Scan(0); //返回上一级
if(res==KEY1) return 2;
}
delay_ms(10);
if(USART3_RX_STA&0X8000)//接收到期待的应答结果
{
if(sim800c_check_cmd(ack))break;//得到有效数据
USART3_RX_STA=0;
}
}
if(waittime==0)res=1;
}
return res;
}
开始就判断是发送的数据还是发送的字符
然后判断是不是需要应答和等待的时间!!
如果需要应答和等待的时间,首先检查数据接收是否完成
如果数据接受完成就判断,接受到的数据中是不是有对应的应答如果有就马上跳出while 循环,
如果没有就将接受标志清零,并且等待时间到达跳出while 循环(这好像不合理)。
个人觉得将 USART3_RX_STA 清零后也要跳出while 循环,不用一直等待,浪费时间
不知我是否正确,请各位大神指导指导,谢谢!!!!
|
|