|
发表于 2023-9-8 16:17:02
|
显示全部楼层
uint8_t comCopy(COM_PORT_E _ucPort, uint8_t *buffer, uint16_t _usTimeout)
{
uint8_t ucData;
uint16_t pos = 0;
uint8_t ret;
uint32_t len;
len = strlen(buffer);
if (len > 255)
{
return 0;
}
/* _usTimeOut == 0 表示无限等待 */
if (_usTimeout > 0)
{
bsp_StartTimer(3, _usTimeout); /* 使用软件定时器3,作为超时控制 */
}
while (1)
{
bsp_Idle(); /* CPU空闲执行的操作, 见 bsp.c 和 bsp.h 文件 */
if (_usTimeout > 0)
{
if (bsp_CheckTimer(3))
{
ret = 0; /* 超时 */
break;
}
}
if (comGetChar(_ucPort, &ucData))
{
comSendChar(COM2, ucData); /* 将接收到数据打印到调试串口1 */
if (ucData == buffer[pos])
{
pos++;
if (pos == len)
{
ret = 1; /* 收到指定的应答数据,返回成功 */
break;
}
}
else
{
pos = 0;
}
}
}
return ret;
}
我使用这段程序,发送的函数和接收不一致,很奇怪,似乎只有发一个字节才能正确
[2023-09-08 16:10:47.800]# SEND HEX>
01 02 03 04 05 06 07 08
[2023-09-08 16:10:47.861]# RECV HEX>
01 A0 04 41 D0 08
[2023-09-08 16:11:25.460]# SEND HEX>
01 02 03 04 05 06 07 08
[2023-09-08 16:11:25.524]# RECV HEX>
01 A0 04 41 D0 08
[2023-09-08 16:11:27.419]# SEND HEX>
01 02 03 04 05 06 07 08
[2023-09-08 16:11:27.480]# RECV HEX>
01 A0 04 41 D0 08
[2023-09-08 16:11:29.179]# SEND HEX>
01 02 03 04 05 06 07 08
[2023-09-08 16:11:29.243]# RECV HEX>
01 A0 04 41 D0 08
[2023-09-08 16:11:30.063]# SEND HEX>
01 02 03 04 05 06 07 08
[2023-09-08 16:11:30.121]# RECV HEX>
01 A0 04 41 D0 08
[2023-09-08 16:16:54.790]# SEND HEX>
01
[2023-09-08 16:16:54.841]# RECV HEX>
01 |
|