Announcements

Equip yourself to optimize PSoc4 MCUs for Evs at the EV Webinar. Click here to register.

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

PSoC™ 4 Forum Discussions

Fayne_Meng
Level 4
Level 4
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 Likes
1 Solution
LinglingG_46
Moderator
Moderator
Moderator
10 questions asked 5 questions asked 250 sign-ins

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

 

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

View solution in original post

0 Likes
2 Replies
LinglingG_46
Moderator
Moderator
Moderator
10 questions asked 5 questions asked 250 sign-ins

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 Likes

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

0 Likes