繁体   English   中英

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

[英]RS232 Serial Pin Read in C in Linux

我有没有可能从COM端口的引脚读取值? Linux下的任何C解决方案都表示赞赏!

是的,请参阅本指南

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

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

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

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

如果您想使用驱动程序,以及此领域的新手,最好的起点将是本书。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM