解决

在我们配置好设备树之后,直接使用cat, echo去对rs485设备进行读写是无效的,因为485还需要一根rts线来控制是读还是写。我们可以在打开rs485后加入以下代码:

plaintext
1
2
3
4
5
6
7
8
9
10
11
struct serial_rs485 rs485conf;

// Get
if (ioctl(ctx->s, TIOCGRS485, &rs485conf) < 0)
return -1;

// Set
rs485conf.flags |= SER_RS485_ENABLED;
rs485conf.flags |= SER_RS485_RTS_ON_SEND;
if (ioctl(ctx->s, TIOCSRS485, &rs485conf) < 0)
return -1;

注意这里的SER_RS485_RTS_ON_SEND一定要加,不然rts会与实际需要的电平相反