【发布时间】:2014-02-27 04:33:05
【问题描述】:
有很多例子展示了如何通过电脑的串口进行通信。但是有没有办法配置 rs 232 的管脚呢?我只需要将 tx 引脚设置一段时间,然后将其重置,依此类推。有没有办法找到 rs 232 的引脚地址? 谢谢你。如果有地址,那么我们如何访问引脚或更改该地址中引脚的状态?
【问题讨论】:
标签: c linux serial-port
有很多例子展示了如何通过电脑的串口进行通信。但是有没有办法配置 rs 232 的管脚呢?我只需要将 tx 引脚设置一段时间,然后将其重置,依此类推。有没有办法找到 rs 232 的引脚地址? 谢谢你。如果有地址,那么我们如何访问引脚或更改该地址中引脚的状态?
【问题讨论】:
标签: c linux serial-port
对于其他引脚 DTR CTS 等,您需要使用 ioctl() 来切换引脚。
这里有一个简单的例子(没有错误检查)来为 DTR 行做这个:
#include <termios.h>
#include <unistd.h>
#include <sys/ioctl.h>
int f = open( "/dev/ttyS0", O_RDWR | O_NOCTTY);
int pins;
ioctl( f, TIOCMGET, &pins);
pins = pins | TIOCM_DTR;
ioctl( f, TIOCMSET, &pins) // the order you do this depends
sleep(1);
ioctl( f, TIOCMGET, &pins);
pins = pins & ~TIOCM_DTR;
ioctl( f, TIOCMSET, &pins)
open 和 tty_ioctl 的手册页中描述了各种标志
使用 TX 引脚可能有点棘手;理论上输出通常为 1,但是您可以设置一个“中断”一段时间,将其设置为 0。您可能可以使用以下内容,但我还没有尝试过:
ioctl( f, TIOCSBRK)
请注意,在传统的 rs232 中,电平理论上是 +/- 12v(介于 +/-3,15V 之间),其中负数为 1,正数为零,这可能与您的预期相反。但是现在很多串口使用TTL或3v3电平代替。
我在使用 DTR 作为输出 GPIO 的应用程序中使用了上述内容;请记住根据需要使用适当的电阻器或其他缓冲,这样您就不会炸毁 PC 串行端口。
带有 USB 串行加密狗的 YMMV。
【讨论】:
如果您不仅限于 RS232。您还有其他选择
首先,如果您的 PC 仍然有并行端口,那么它会比 RS232 更好。
或者,您可以使用一些 USB-GPIO 模块。一些建议:
【讨论】: