SIM7600 4G模块与STM32通过串口相连,为何32板收发数据不正常
本帖最后由 hwluo 于 2018-8-17 11:30 编辑第一次使用SIM7600 4G模块,用了商家配的例程里的代码,发现可以点亮野火32板上的LED灯,但是一旦把32收集到的数据通过串口相连的4G模块往指定服务器发送的函数加进代码里面,4G模块就感觉工作不正常,通过串口调试助手来测试时发现连之前可以通过上位机控制LED灯亮灭都做不到了,而且在网络调试助手上也没有看到有App_buffer收集到的数据返回(已用Keil5里的仿真调试观察过App_buffer数组里的确有值),有没有用过SIM7600这个模块的前辈指教指教?
void Remote_Control(void)
{
if(strstr(Uart2_Buf,"+IPD")!=NULL)
{
Heartbeat=0;
Heart_beat=0;
delay_ms(100);
if(strstr(Uart2_Buf,": Ligh#")!=NULL)
{
if(D_Status.breathing_light == Off)
{
LED1(ON);
delay_ms(2000);
D_Status.breathing_light = On;
}
else if(D_Status.breathing_light == On)
{
LED1(OFF);
delay_ms(2000);
D_Status.breathing_light = Off;
}
}
}
CLR_Buf2();
}
void SIM7600_Data_Send(void)
{
Second_AT_Command("AT+CIPSEND=0,",">",2);//串口2 发数据到TCP服务器 说明 AT+CIPSEND=0, 不带数据长度的时候需要数据后面加1A结束
UART2_SendString((char*)APP_buffer);//发数据到服务器
USART_SendData(USART2,0x1A);//发送结束符
CLR_Buf2(); //清空BUF2
if(Heart_beat)
{
Send_OK();//发心跳包
Heart_beat=0;
}
}
注:unsigned char APP_buffer= {0,0}; // 用于存储APP显示信息
分步调:
(1)STM32与USB串口调试工具;
(2)4G模块与USB串口调试工具。 没用过,爱莫能助...看看别人吧 Uart2_Buf是接收缓存区,App_buffer没有看到你在哪里赋值,值看到App_buffer发送数据 试一试行不行,对窄带物联网有很大帮助 逐行逐步的检查代码看看哪一步正好是数据没传输进去。少量加测试代码先尝试看看数据传输是否可行。
4G模块SIM7600CE,先用串口助手试一下,每一句发送都要加回车来检测,转到STM32后查看、 今天早上已经解决了问题,关键在于UART2_SendString这个函数有个检测字符串结束的坑我没留意到,
void UART2_SendString(char* s)
{
while(*s)//检测字符串结束符
{
while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET);
USART_SendData(USART2 ,*s++);//发送当前字符
}
}
我把App_buffer数组里那些没用的空位填补了字符‘0’进去再往服务器发送就正常了,不过现在那个用上位机操控LED灯亮灭还是不理想,有的时候操控很灵敏,有的时候怎么操控都没反应,我个人想了想觉得有可能是因为我现在用的32是裸机,没有操作系统,只有单线程,开灯关灯的代码执行的时机与我自己手动在上位机发数据的时机不吻合,导致出现数据掉包的现象,不知道我自己的思考对不对,有没有前辈再指导指导? void UART2_SendString(char* s)
这个函数发送任意数据是有问题的,就是楼主已经注意到的发送数值0的问题。建议再写个串口发送函数,串口发送的是定长数据,不管数据里面是否有0 我做过F1+FreeRTos+7600的数据采集项目,有互交。如果觉得有帮助可以联系我。可以交流一下
790384799
sprintf((char*)cmdbuf,"AT+CIPSEND=%d,%d,\"%d.%d.%d.%d\",%d\r",channel, size ,dsc->ip,dsc->ip,dsc->ip,dsc->ip,dsc->port);
这个命令发送定长数据 就解决了hex数据中间有0x1a的问题
页:
[1]