野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 258|回复: 2

[求助] uart3 发送数据分帧

[复制链接]
发表于 2025-3-20 15:31:41 | 显示全部楼层 |阅读模式
使用 UART3 做串口数据发送,200ms 发送一包数据,一包数据为 100 字节。

发现会一包 100 字节会分帧,求助该怎么解决?


测试代码

测试代码

串口波形

串口波形
回复

使用道具 举报

 楼主| 发表于 2025-3-20 15:35:27 | 显示全部楼层
前面几包可能是完整的一帧,但是后面的数据基本上都是两帧 9 字节 + n 字节
回复 支持 反对

举报

 楼主| 发表于 2025-3-20 15:36:43 | 显示全部楼层
串口配置函数如下:
int configure_serial_port(const char *path,speed_t speed)
{
    int fd;
    // 获取串口设备描述符
    fd = open(path, O_RDWR);
    if (fd < 0)
    {
        printf("Fail to Open %s device\n", path);
        return fd;
    }

    struct termios opt;

    // 清空串口接收缓冲区
    tcflush(fd, TCIOFLUSH);
    // 获取串口参数opt
    tcgetattr(fd, &opt);

    // 设置串口输出波特率
    cfsetospeed(&opt, speed);
    // 设置串口输入波特率
    cfsetispeed(&opt, speed);
    // 设置数据位数
    opt.c_cflag &= ~CSIZE;
    opt.c_cflag |= CS8;
    // 校验位
    opt.c_cflag &= ~PARENB; /* 不使用奇偶校验 */
    opt.c_iflag &= ~INPCK;  /* 禁止输入奇偶校验 */
    // opt.c_cflag &= ~PARODD; /* 设置为偶效验*/
    // 设置停止位, 1 个停止位
    opt.c_cflag &= ~CSTOPB;

    // 确保关闭 ONLCR ,取消 将换行符 \n 自动转换为回车+换行符 \r\n
    opt.c_oflag &= ~ONLCR;

    // 禁止回车符转换
    opt.c_iflag &= ~(ICRNL | INLCR | IGNCR);

    // 禁止软件流控
    opt.c_iflag &= ~(IXON | IXOFF | IXANY);


    /* 取消回显 */
    opt.c_lflag &= ~ECHO;

    // 更新配置
    tcsetattr(fd, TCSANOW, &opt);

    printf("Device %s is set to 115200bps,8N1\n", path);

    return fd;
}
回复 支持 反对

举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-4-1 18:43 , Processed in 0.194021 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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