![如何将串口设置为RS-485模式?](https://linux22.com/image/76322/%E5%A6%82%E4%BD%95%E5%B0%86%E4%B8%B2%E5%8F%A3%E8%AE%BE%E7%BD%AE%E4%B8%BARS-485%E6%A8%A1%E5%BC%8F%EF%BC%9F.png)
我正在使用从串行端口到 USB 的转换器,在 Windows 中,可以打开串行端口属性并设置复选框 RS-485,只有在此之后我才能从设备接收数据。如何在 Linux 中做同样的事情?因为默认情况下我得到的结果与在 Windows 中未经检查的 RS-485 相同:
Port name - /dev/ttyACM0; Method name - readBytes(); Serial port operation timeout (500 ms).
execute try 2 error: I/O exception - failed to read
我的设备是:
Bus 001 Device 008: ID 04e2:1411 Exar Corp.
setserial -a /dev/ttyACM0
/dev/ttyACM0, Line 0, UART: unknown, Port: 0x0000, IRQ: 0
Baud_base: 115200, close_delay: 5, divisor: 0
closing_wait: 300
Flags: spd_normal low_latency
答案1
您必须编写一些 C 代码,如内核文档。
#include <linux/serial.h>
struct serial_rs485 rs485conf = {0};
int fd = open ("/dev/ttyACM0", O_RDWR);
if (fd < 0)...
rs485conf.flags |= SER_RS485_ENABLED;
if (ioctl (fd, TIOCSRS485, &rs485conf) < 0)...