RS232串行引脚在Linux中读取C语言

时间:2013-03-01 10:53:31

标签: c linux serial-port

是否有可能从COM端口的引脚读取值?感谢Linux下的任何C语言解决方案!

3 个答案:

答案 0 :(得分:2)

是的,请参阅this guide

使用ioctl()功能读取各种控制引脚。当然,通过正常read()处理可以最好地读取数据,您不希望轮询异步串行数据。

我不认为您的假设(在评论中表示)驱动程序必须检查引脚状态以处理数据是正确的,通常串行端口由UART“支持”并且通常处理硬件中的RX / TX引脚。

答案 1 :(得分:0)

很可靠,你不能读/写UART的引脚。 即使在硬件级别,您也必须读/写整个字节。没有位访问或读/写引脚访问。 字节在接收/发送UART缓冲区中读/写。

无论哪种方式,您都不能直接访问缓冲区,代表您的Linux驱动程序将完成这项工作。您只需在应用程序中使用驱动程序,使用UART,UART提供的linux驱动程序,标准API,如open(),read(),write(),ioctl(),通过它们与UART进行交互设备

如果你想使用驱动程序,并且对这个领域不熟悉,那么最好的起点就是 this book.

答案 2 :(得分:0)

这个问题的确切答案取决于所讨论的精确硬件。我知道我工作的一段代码,基于接收字母'a'作为比特率的指示,它将轮询RX引脚以检测0和1之间的转换以检测比特的“宽度”,然后它会计算串口的正确时钟频率,并配置串口以匹配另一端的比特率。

“PC”型硬件解决方案将无法读取RX / TX引脚。在其他硬件中,有可能这样做。许多嵌入式系统允许将各种引脚配置为输入,输出或“具有功能”(在我们的例子中,RX,TX,CTS,RTS等) - 例如,您可以将RX引脚配置为输入,从而阅读它的状态。当然,普通的串口驱动程序可能会将这些引脚设置为“有一个功能”[或者期望在内核启动之前运行引导代码以这种方式配置它]。因此,您必须在自己的某些内核代码中重新配置引脚,最有可能。请注意,这可能会导致驱动程序对实际串行端口产生意外的副作用 - 当它尝试对串行端口执行操作并且“无法按预期工作”时可能会“烦恼”,因为它“错误配置”。

几乎可以肯定通过IOCTL调用读取(和/或写入)控制引脚的状态,例如CTS,RTS。