嵌入式技术论坛
直播中

张丽

7年用户 1373经验值
私信 关注
[问答]

libmodbus rtu主机输出码有问题不知各位大神有没有遇到过

MCU为STM32f429zi。RTU串口参数为19200,偶校
初始化代码
RTU = modbus_new_rtu(“/dev/uart3”, 19200, ‘E’, 8, 1);
rt_base_t Ctrl485;
Ctrl485=GET_PIN(D,4);
rt_pin_mode(Ctrl485,PIN_MODE_OUTPUT);

modbus_rtu_set_serial_mode(RTU, MODBUS_RTU_RS485);
modbus_rtu_set_rts(RTU, Ctrl485, MODBUS_RTU_RTS_UP);
modbus_set_slave(RTU, 1); //从机地址
modbus_connect(RTU);
modbus_set_response_timeout(RTU, 0, 100000);
主机读
modbus_read_registers(RTU, 0x2001, 1, Buf);
理论值应为 01 03 20 01 00 01 2位校验码
串口工具显示 81 03 A0 01 10 01
觉得是串口波特率有问题,stm32f4如果是有校验为则数据位为9位,但libmodbus数据位只能为8位
不知各位大神有没有遇到这类问题?


回帖(2)

王丽

2023-4-14 10:41:12
不使用奇偶校验就正常?
举报

张静

2023-4-14 10:41:20
STM32 串口的数据位 databits 决定了串口寄存器中字长寄存器的值。 databits 值是数据位长度 + 一个奇偶校验位(如果无奇偶校验则不加一)。
可以单步调试跟踪一下串口寄存器的值,看一下加不加校验实际设置的寄存器有什么不一样的地方,调用 modbus_connect() 函数进行了硬件的设置。
2.jpg
举报

更多回帖

发帖
×
20
完善资料,
赚取积分