一、问题
最近使用SIM900A做一个STM32的项目,用的正点原子的代码,单独对demo测试没有问题,但是当集成到整个项目中时,效果就非常不理想,主要问题:
1、后台服务器接收到的数据时而密集,时而分散,即并不是按照代码中的设计来呈现
2、会有卡死的现象
3、效率低,有时候连接上服务器,但就是没有数据,实际上板子已经发送出来数据
介于以上问题,查看了众多的手册(22篇GPRS无线模块SIM900软硬件设计技术资料合集),并进过多次测试,最终运行效果很好:
二、代码
1,正点原子的demo代码 (不建议使用)
void Landing_Init(int id,int num,char *jiaoben, u8 *humiture_buff )
{
u8 ch = 0x1A;//结束输入,发送数据
int i=1000;
if(sim900a_send_cmd("AT", "OK", 500)) return; //模块有效性检查,无效时候就不进行联网配置
USART2_RX_STA = 0;
sim900a_send_cmd("AT+CIPCLOSE=1", "CLOSE OK", 500);
sim900a_send_cmd("AT+CGCLASS=\"B\"", "OK", 500);
USART2_RX_STA = 0;
sim900a_send_cmd("AT+CGDCONT=1,\"IP\",\"CMNET\"", "OK", 500);
USART2_RX_STA = 0;
sim900a_send_cmd("AT+CGATT=1", "OK", 500);
USART2_RX_STA = 0;
sim900a_send_cmd("AT+CIPCSGP=1,\"CMNET\"", "OK", 500);
USART2_RX_STA = 0;
sim900a_send_cmd("AT+CLPORT=\"TCP\",\"2002\"", "OK",500);
USART2_RX_STA = 0;
if(sim900a_send_cmd("AT+CIPSTART=\"TCP\",\"194.233.101.180\",\"7890\"", "OK", 500)) //服务端不在线时候则重新建立发送请求
{
sim900a_send_cmd("AT+CIPCLOSE=1", "CLOSE OK", 500);
return;
}
USART2_RX_STA = 0