完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
小弟初学 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("%srn",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 循环,不用一直等待,浪费时间 不知我是否正确,请各位大神指导指导,谢谢!!!! |
|
相关推荐
3个回答
|
|
直接修改,测试,然后如果没问题,说明你这样改OK。这种代码优化,测试检测最好评估了。
|
|
|
|
谢谢!!!!!
|
|
|
|
请问,哪个判断字符还是数据的是什么意思,一直很困扰,
//cmd:发送的命令字符串(不需要添加回车了),当cmd<0XFF的时候,发送数字(比如发送0X1A),大于的时候发送字符串. 为什么 |
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2574 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2367 浏览 5 评论
3220 浏览 3 评论
2841 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2795 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
675浏览 1评论
912浏览 0评论
1033浏览 0评论
676浏览 0评论
508浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 13:55 , Processed in 1.536333 second(s), Total 80, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号