libmodbus基于RS485使用偶校验时发送数据出错

发布于 2021-01-17 01:13:58

在使用libmodbus软件包时发现如果在

modbus_t* ctx = modbus_new_rtu("/dev/uart3", 19200, 'E', 8, 1);

使用偶校验时从rs485串口发送的数据有错误,但使用

modbus_t* ctx = modbus_new_rtu("/dev/uart3", 19200, 'N', 8, 1);

方式,即无奇偶校验时,发送的数据是正确的。
如有时间,请该软件包的维护者抽空查证一下。多谢!

查看更多

关注者
0
被浏览
217
5 个回答
张世争
张世争 2021-01-17

这个串口的校验,是主从机都要一起改的。

flashman2002
flashman2002 2021-01-17

使用stm32f103系列芯片的串口在使用奇偶校验时,数据长度为9,即

modbus_t* ctx = modbus_new_rtu("/dev/uart3", 19200, 'E', 9, 1);

但在modbus-tru.c中的static int _modbus_rtu_connect(modbus_t *ctx)函数中没有对数据长度为9的支持:

switch (ctx_rtu->data_bit) {
    case 5:
        tios.c_cflag |= CS5;
        break;
    case 6:
        tios.c_cflag |= CS6;
        break;
    case 7:
        tios.c_cflag |= CS7;
        break;
    case 8:
    default:
        tios.c_cflag |= CS8;
        break;
    }

目前bug跟踪到此。

yufanyufan77
yufanyufan77 2021-02-04

当时用校验时,数据位得设成9位,但是我发现设不上 我靠 尴尬了

sunwan
sunwan 2021-02-27

修复这个stm32驱动BUG的PR已经并入master了。
https://github.com/RT-Thread/rt-thread/pull/4382

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览