4025UART发送数据较长出现数据分包的情况

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Fayne_Meng
Level 4
Level 4
Distributor - Weikeng(GC)
100 sign-ins First like received 10 likes given

你好,

     我这边遇到一个情况,用户调用void UART_UartPutString(const char8 string[])函数,string为字符串,长度比较长(60多个字节),上位机接收4025串口的数据,发现接收到的string数据被分了两帧(设置的超时时间是30ms,如下截图),时间间隔比较大,客户这个是发送的AT指令,这种情况会导致连接模块失败,请帮忙看看,谢谢。

Fayne_Meng_0-1670224913910.png

 

 

0 点赞
1 解答
LinglingG_46
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 10 questions asked

1:这个函数的函数体是这样的:

void UART_UartPutString(const char8 string[])
{
uint32 bufIndex;

bufIndex = 0u;

/* Blocks the control flow until all data has been sent */
while(string[bufIndex] != ((char8) 0))
{
UART_UartPutChar((uint32) string[bufIndex]);
bufIndex++;
}
}

按照这个函数的分析,会一直发送,直到发送完全。

2:你说的分包是什么意思?

3:你要根据实际发送的长度,计算实际需要时间。我用115200发送了下面一串数据,实际计算和逻辑分析仪分析时间一致。截图如下:

UART_UartPutString("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");

逻辑分析仪的截图如:

LinglingG_46_0-1670229729443.png

 

这个结果和代码分析一致,不存在时间过长的问题。

在原帖中查看解决方案

0 点赞
2 回复数
LinglingG_46
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 10 questions asked

1:这个函数的函数体是这样的:

void UART_UartPutString(const char8 string[])
{
uint32 bufIndex;

bufIndex = 0u;

/* Blocks the control flow until all data has been sent */
while(string[bufIndex] != ((char8) 0))
{
UART_UartPutChar((uint32) string[bufIndex]);
bufIndex++;
}
}

按照这个函数的分析,会一直发送,直到发送完全。

2:你说的分包是什么意思?

3:你要根据实际发送的长度,计算实际需要时间。我用115200发送了下面一串数据,实际计算和逻辑分析仪分析时间一致。截图如下:

UART_UartPutString("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");

逻辑分析仪的截图如:

LinglingG_46_0-1670229729443.png

 

这个结果和代码分析一致,不存在时间过长的问题。

0 点赞
Fayne_Meng
Level 4
Level 4
Distributor - Weikeng(GC)
100 sign-ins First like received 10 likes given

谢谢。我找到原因了,客户的上位机设置有问题,9600波特率,发送32个字节大约需要32ms,超过了软件设置的超时时间,用户一共发了65个字节,所以上位机软件分行显示了,表现就是一包数据分成两行显示,间隔30多ms;

0 点赞