[技术问答] ma35d1 buildroot 485串口收发

[复制链接]
2958|4
liwilliam 发表于 2025-9-17 14:54 | 显示全部楼层 |阅读模式
1.Numaker-BASE-MA35D1B1开发板,buildroot编译系统
2.我用5.15.2版本的qt制作了串口软件在开发板上运行,然后用串口模块将一个485端口转接上电脑,用上位机接收和发送数据。

目前的问题,qt串口软件运行后,打开串口,能够接收来自上位机的软件发送的数据并显示,
但是无法发送,点击send去发送数据,上位机软件没有显示任何数据。

我用了echo hello > /dev/ttyS*  去发送数据,上位机串口软件可以显示收到的数据
波特率和一些参数设置,检测过了,没什么问题。

从发送函数的检测来看,没有报错,只有“write_return_value”的log输出,发送应该是成功的。
发送函数如下:
void serialPort::sendPushButtonClicked()
{

    /* 获取 textEdit 数据,转换成 utf8 格式的字节流 */
    QByteArray data = textEdit->toPlainText().toUtf8();
    qint64 w_f = serialPort_1->write(data);
    if (!serialPort_1->waitForBytesWritten(1000)) {
        qDebug() << "send data timeout!";
    }
    if(w_f == -1)
    {
        qDebug()<<"Send data error";
    }
    else
    {
        qDebug()<<"write_return_value:"<<w_f;
    }
}
请教这种情况下,问题一般会出在哪里
 楼主| liwilliam 发表于 2025-9-18 17:09 | 显示全部楼层
我用工程自带的minicom 去发送数据到 485口,485口接入的上位机串口软件同样无任何讯息
反过来,上位机软件发送,minicom是能接收并打印出来的,
riplay 发表于 2025-9-19 09:37 | 显示全部楼层
RS-485是半双工,收发共用线路。这意味着485转换芯片需要一个额外的引脚来控制当前是接收模式还是发送模式。这个引脚通常叫 DE (Driver Enable) 或 RE (Receiver Enable),或者合并为 DE/RE。问题很可能不是UART协议或软件配置的错误,而是缺少了对RS-485物理层特性的控制(方向引脚)。在Qt程序中,在调用 write() 之前,先通过GPIO系统调用或其它方式将这个引脚置高;发送完成后,再将其置低。
 楼主| liwilliam 发表于 2025-9-19 09:53 | 显示全部楼层
riplay 发表于 2025-9-19 09:37
RS-485是半双工,收发共用线路。这意味着485转换芯片需要一个额外的引脚来控制当前是接收模式还是发送模式 ...

我在驱动中看到这样一个语句,这个不是设置485收发自动转换吗?应该不用自己再去手动操作吧       
驱动路径:usr-path/ouput/build/linux-custom/drivers/tty/serial/ma35d1_serial.c       
/* set auto direction mode */
serial_out(p, UART_REG_ALT_CSR,(serial_in(p, UART_REG_ALT_CSR) | (1 << 10)));
qinlu123 发表于 2025-9-19 13:55 | 显示全部楼层
liwilliam 发表于 2025-9-19 09:53
我在驱动中看到这样一个语句,这个不是设置485收发自动转换吗?应该不用自己再去手动操作吧       
驱动路径:u ...

打开原理图看看电路是不是自动的就知道了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

26

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部