在使用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);
方式,即无奇偶校验时,发送的数据是正确的。
如有时间,请该软件包的维护者抽空查证一下。多谢!
使用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跟踪到此。
修复这个stm32驱动BUG的PR已经并入master了。
https://github.com/RT-Thread/rt-thread/pull/4382
为啥我从没见过数据长度为9的场景啊,各种串口调试助手也没有配数据位是9的情况啊,求解!
嗯,我也没使用过9位的场景。不过8位数据位中,可以有校验位。可能不同的上位机,处理校验有不同