OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2419|回复: 3

求助,stm32接收mqtt数据出现了数据丢失的问题。大神们帮帮忙

[复制链接]

2

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2020-7-24
在线时间
4 小时
发表于 2020-8-3 10:05:02 | 显示全部楼层 |阅读模式
5金钱
串口接收到数据
[09:55:55.853] 1-
[09:55:55.853] 1-
[09:55:55.853] 1-
[09:55:55.853] 1-
[09:55:55.853] 1-
[09:55:55.853] 1-
[09:55:55.853]
[09:55:55.885] 接收到数据
[09:55:55.885] 数据长度68
[09:55:55.885] 服务器推送:68
[09:55:55.905] 服务器推送:48
[09:55:55.905] 服务器推送:72
[09:55:55.905] 服务器推送:8
[09:55:55.905] 服务器推送:47
[09:55:55.905] 服务器推送:110
[09:55:55.905] 服务器推送:106
[09:55:55.905] 服务器推送:103
[09:55:55.905] 服务器推送:47
[09:55:55.905] 服务器推送:99
[09:55:55.905] 服务器推送:97
[09:55:55.905] 服务器推送:114
[09:55:55.905] 服务器推送:123
[09:55:55.905] 衿魍扑34
[09:55:55.916] 服务器推送:109
[09:55:55.916] 服务器推送:97
[09:55:55.916] 服务器推送:99
[09:55:55.916] 服务器推送:73
[09:55:55.916] 服务器推送:100
[09:55:55.916] 服务器推送:34
[09:55:55.916] 服务器推送:58
[09:55:55.916] 服务器扑34
[09:55:55.926] 服务器推送:67
[09:55:55.926] 服务器推送:74
[09:55:55.926] 服务器推送:88
[09:55:55.926] 服务器推送:77
[09:55:55.926] 服务器推送:49
[09:55:55.926] 服务器推送:57
[09:55:55.934] 服务器推送:48
[09:55:55.934] 服务器推送:56
[09:55:55.934] 服务器推送:48
[09:55:55.934] 服务器推送:48
[09:55:55.934] 服务器推送:34
[09:55:55.934] 服务器推送:109
[09:55:55.934] 服衿魍扑101
[09:55:55.945] 服务器推送:115
[09:55:55.945] 服务器推送:115
[09:55:55.945] 服务器推送:97
[09:55:55.945] 服务器推送:103
[09:55:55.945] 服务器推送:101
[09:55:55.945] 服务器推送:34
[09:55:55.955] 服务器推送:58
[09:55:55.955] 服务器推送:123
[09:55:55.955] 服务器推送:34
[09:55:55.955] 服务器推送:119
[09:55:55.955] 服务器推送:34
[09:55:55.955] 服务器推送:58
[09:55:55.955] 服务器推送:49
[09:55:55.955] 服务器推送:125
[09:55:55.965] 服务器推送:44
[09:55:55.965] 服务器推送:34
[09:55:55.965] 服务器推送:116
[09:55:55.965] 服务器推送:121
[09:55:55.965] 服务器推送:34
[09:55:55.965] 服务器推送:58
[09:55:55.976] 服务器推送:48
[09:55:55.976] 服务器推送:44
[09:55:55.976] 服务器推送:111
[09:55:55.976] 服务器推送:116
[09:55:55.976] 服务器推送:34
[09:55:55.976] 服务器推送:58
[09:55:55.976] 服务器推送:51
[09:55:55.983] 服务器推送:44
[09:55:55.983] 服务器推送:34
[09:55:55.983] 服务器推送:119
[09:55:55.983] 服务器推送:34
[09:55:55.983] 服务器推送:58
[09:55:55.983] 服务器扑48
[09:55:55.994] 服务器推送:125
[09:55:55.994] 数据直接显示0H/njg/car{"macId":"CJXM190800"message":{"w":1},"ty":0,ot":3,"w":0}
[09:55:55.994]

各位大神,请帮帮忙,我在串口中断中做了以下处理
/**
* 串口中断
**/
void DEBUG_USART2_IRQHandler()
{
  if(USART_GetITStatus(DEBUG_USART2, USART_IT_RXNE) != RESET)//½óêÕμ½êy¾Y
        {         
                if(mqttDatas.Connect_flag == 0)//±íê¾»1Î′ᬽó·tÎñÆ÷£¬′|óúÖ¸áîÅäÖÃ×′ì¬
                {
                        if(DEBUG_USART2->DR)
                        {
                         uDatas.USART2_RX_BUF[uDatas.USART2_RX_COUNT] = DEBUG_USART2->DR;
                         uDatas.USART2_RX_COUNT++;
                        }
          }
                else
                {
                        uDatas.USART2_RX_BUF[uDatas.USART2_RX_COUNT] = DEBUG_USART2->DR;
                        if(uDatas.USART2_RX_COUNT == 0)
                        {
                          TIM_Cmd(TIM4,ENABLE);
                        }
                        else
                        {
                          TIM_SetCounter(TIM4,0);
                        }
                        uDatas.USART2_RX_COUNT++;
                        if(uDatas.USART2_RX_BUF[uDatas.USART2_RX_COUNT-1] == 0x30 || uDatas.USART2_RX_COUNT == USART2_MAX_RECV_LEN)
                        {
                          printf("1-\n");
                        }
          }
        }
}


/**
* 定时器4
**/
void TIM4_IRQHandler(void)
{
  if(TIM_GetITStatus(TIM4,TIM_IT_Update) != RESET)
        {
     memcpy(&mqttDatas.MQTT_RxDataInPtr[1],uDatas.USART2_RX_BUF,uDatas.USART2_RX_COUNT);
                 mqttDatas.MQTT_RxDataInPtr[0] = uDatas.USART2_RX_COUNT;
                 mqttDatas.MQTT_RxDataInPtr+=BUFF_UNIT;
                 if(mqttDatas.MQTT_RxDataInPtr == mqttDatas.MQTT_RxDataEndPtr)
                 {
                         mqttDatas.MQTT_RxDataInPtr = mqttDatas.MQTT_RxDataBuf[0];
           }
                 //uDatas.USART2_RX_COUNT = 0;
                 TIM_SetCounter(TIM3,0);
                 TIM_Cmd(TIM4,DISABLE);
                 TIM_SetCounter(TIM4,0);
                 TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
        }

}
为什么要
if(uDatas.USART2_RX_BUF[uDatas.USART2_RX_COUNT-1] == 0x30 || uDatas.USART2_RX_COUNT == USART2_MAX_RECV_LEN)
                        {
                          printf("1-\n");
                        }
才能显示 /njg/car{"macId":"CJXM190800"message":{"w":1},"ty":0,ot":3,"w":0},但是数据会丢失1-3位数



如果将printf("1-\n");去掉就只能显示D0H,数据位数不会丢失,但是没办法直接在程序上直接转换json数据。

最佳答案

查看完整内容[请看2#楼]

最后的处理方式是 int table[4]; char buff[1024]; memcpy(table,mqttDatas.MQTT_RxDataOutPtr,4); strcpy(buff, (char*)table); memset(buff, 0, sizeof(buff));
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2020-7-24
在线时间
4 小时
 楼主| 发表于 2020-8-3 10:05:03 | 显示全部楼层
最后的处理方式是
int table[4];
char buff[1024];
memcpy(table,mqttDatas.MQTT_RxDataOutPtr,4);
strcpy(buff, (char*)table);
memset(buff, 0, sizeof(buff));
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2020-7-24
在线时间
4 小时
 楼主| 发表于 2020-8-3 10:10:53 | 显示全部楼层
本帖最后由 njg182 于 2020-8-3 10:32 编辑

别沉了,各位大神帮帮忙
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2020-7-24
在线时间
4 小时
 楼主| 发表于 2020-8-3 10:12:14 | 显示全部楼层
本帖最后由 njg182 于 2020-8-3 10:34 编辑

能不能直接通过十进制的数据转成json格式的数据呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-30 13:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表