硬汉嵌入式论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: eric2013
收起左侧

串口FIFO的comGetChar函数正确使用姿势

  [复制链接]

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 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
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-3 09:21 , Processed in 0.224969 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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