小编KPR*_*KPR的帖子

Linux UART (16550A) RS485 模式

我正在尝试配置我的串行端口(/dev/ttyS0)以自动控制 RTS 引脚。我已经可以通过 ioctl TIOCM_RTS 标志切换从用户空间执行此操作,但在我的情况下它太慢 - 从设备响应太快,我错过了它。

我尝试通过启用 RS485 模式来实现它,但最终出现以下错误:

    unable to set IOCTL:: Inappropriate ioctl for device
Run Code Online (Sandbox Code Playgroud)

我的实现

  port_fd = open(port.c_str(), O_RDWR);
if (port_fd != -1) {
  struct serial_rs485 rs485conf={0};
  rs485conf.flags |= SER_RS485_ENABLED;
  rs485conf.flags |= SER_RS485_RTS_ON_SEND;
  rs485conf.delay_rts_before_send = 0;
  int rv = ioctl(port_fd,TIOCSRS485, &rs485conf);

  if(rv){

      printf("rv = %d\n", rv);

      perror("unable to set IOCTL:");

}
Run Code Online (Sandbox Code Playgroud)

dmesq 输出:

[    0.000000] console [tty0] enabled
[    1.338716] 00:01: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[ …
Run Code Online (Sandbox Code Playgroud)

linux serial-port flow-control rs485 uart

5
推荐指数
0
解决办法
1279
查看次数

标签 统计

flow-control ×1

linux ×1

rs485 ×1

serial-port ×1

uart ×1