你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

SIM7600 4G模块与STM32通过串口相连,为何32板收发数据不正常

[复制链接]
hwluo 提问时间:2018-8-17 11:29 /
本帖最后由 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[APP_Size_Max]= {0,0};        // 用于存储APP显示信息

收藏 1 评论8 发布时间:2018-8-17 11:29

举报

8个回答
奏奏奏 回答时间:2018-8-17 11:51:34
分步调:
(1)STM32与USB串口调试工具;
(2)4G模块与USB串口调试工具。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

butterflyspring 回答时间:2018-8-17 11:52:44
没用过,爱莫能助...看看别人吧
时光虫子 回答时间:2018-8-17 14:13:10
Uart2_Buf是接收缓存区,App_buffer没有看到你在哪里赋值,值看到App_buffer发送数据

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

helloworld1998 回答时间:2018-8-17 16:44:50
试一试行不行,对窄带物联网有很大帮助
feixiang20 回答时间:2018-8-17 23:44:30
逐行逐步的检查代码看看哪一步正好是数据没传输进去。少量加测试代码先尝试看看数据传输是否可行。
4G模块SIM7600CE,先用串口助手试一下,每一句发送都要加回车来检测,转到STM32后查看、

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

hwluo 回答时间:2018-8-18 15:54:55
今天早上已经解决了问题,关键在于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是裸机,没有操作系统,只有单线程,开灯关灯的代码执行的时机与我自己手动在上位机发数据的时机不吻合,导致出现数据掉包的现象,不知道我自己的思考对不对,有没有前辈再指导指导?

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4 结帖奖励

查看全部评分

zhao.zhao 回答时间:2018-8-20 16:28:40
void UART2_SendString(char* s)
这个函数发送任意数据是有问题的,就是楼主已经注意到的发送数值0的问题。建议再写个串口发送函数,串口发送的是定长数据,不管数据里面是否有0
cxelove 回答时间:2018-9-26 13:07:40
我做过F1+FreeRTos+7600的数据采集项目,有互交。如果觉得有帮助可以联系我。可以交流一下
790384799
  1. sprintf((char*)cmdbuf,"AT+CIPSEND=%d,%d,"%d.%d.%d.%d",%d\r",channel, size ,dsc->ip[0],dsc->ip[1],dsc->ip[2],dsc->ip[3],dsc->port);
复制代码

这个命令发送定长数据 就解决了hex数据中间有0x1a的问题

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版