我试图通过控制 RS232 信号的 RTS 或 DTR 引脚来打开/关闭输出或切换继电器等。我用 C 创建了一个脚本,用于打开/关闭 DTR 或 RTS 标志,但我的串行端口到终端适配器的输出没有任何差异(见下图):
我的RS232的结构如下:
如图所示,RTS 信号位于引脚 8 上,当我将其标记为“打开”时,我在引脚 1(接地)和引脚 8(RTS)之间进行测量,得到 3V。当我将其切换回关闭状态时,它仍保持在 3V,因此当我切换 DTR 或 RTS 时没有任何变化。
有谁知道我做错了什么?
更新
我已经尝试了下面的代码(我认为它与@Vincent Achard 的答案相匹配)。这不起作用,当我在引脚 1(接地)和引脚 6(5V 输出)之间进行测量时,运行脚本时仍保持 5V。另外,当我在引脚 1(接地)和 ping 8(RTS)之间进行测量时,运行脚本时电压仍为 2.8V。有人看到这段代码有什么错误吗?
提前致谢!
答案1
串行接口上的 DTR 和 RST 引脚的作用与 GPIO 不同:它们的电平不会保持高电平或低电平。
我可以通过修改内核 tty 驱动程序来覆盖此行为,以获得永久的非默认状态:
文件:drivers/tty/tty_port.c
在里面
function tty_port_shutdown()
代替
tty_port_lower_dtr_rts(port);
经过
tty_port_raise_dtr_rts(port);
也许存在一些更简单的解决方案???