簡體   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