2009-07-29 217 views
5

如何使用C從串口讀取數據?然後再將數據傳輸到調制解調器? 我正在使用RS 232電纜進行串行通信...從串口讀取數據

+2

什麼操作系統? – 2009-07-29 20:52:32

+2

什麼硬件/平臺? – DaveR 2009-07-29 20:57:08

回答

2

首先,這非常依賴於您使用的操作系統。

對於* nix類型,您通常會像普通文件(例如/ dev/ttyS0)一樣打開串口設備,然後開始讀取或寫入數據。 至於Windows,我可以給你建議尋找一個可靠的庫,因爲Windows串行通信可以是一個真正的噩夢。更甚者,舊版本的Windows和以前的版本可能會有一些差異。

個人而言,因爲我是wxWidgets用戶,我使用wxCTB。 您應該查找適合您使用的IDE的庫。

一些免費的鏈接;) www.robbayer.com/files/serial-win.pdf www.lookrs232.com/com_port_programming/

6

了很多有用的信息,關於處理串行端口上都電腦和電線的設備端可以在Jan Axelson的網站找到Serial Port Complete

與港口的實際互動將會高度平臺化。在大多數的味道* nix中,你打開一個名爲什麼設備,如/dev/ttya和使用read()write()ioctl()讀,寫和配置端口。

在Windows上,打開與CreateFile()功能命名COM1(或\\.\COM1一些口味)的文件,然後把它配置和快樂與像SetCommState()功能和DCB結構。這些細節與您在* nix上需要做的事情大致相似,但組織完全不同。您可以在MSDN上找到關於配置和使用COM端口的全部討論。

在嵌入式設備上,您將直接訪問UART的硬件寄存器或與RTOS交互。無論哪種方式,基本上無法使設備上的代碼廣泛地可移植。

0

在Windows的土地上,你最好找到一個讓所有魔法發生的庫。

就我個人而言,我使用Borland C++將小工具放在一起與我的硬件(引導程序,配置和測試)進行對話,並且我很滿意在Delphi和BCC中都可以使用的TurboPower Async Professional Library,它是開源的(Mozilla公共許可證1.1)。

2

在嵌入式世界你的編譯器將有一些機構(通常是編譯器特異性的),允許其訪問用於實現串行端口功能或者在設備內或在外部存儲器或IO硬件寄存器映射設備。這些寄存器定義通常由工具或處理器製造商提供,它是,不只是一個寄存器設置其操作模式,並然後讀出TJE的數據接收緩衝寄存器寫入配置控制值到串行端口的情況下。

聽起來很簡單,但是,在MSP-430郵件列表USART編程問題是最常見的一個主題。

1

要擴展Ian的答案,典型的嵌入式c編譯器將有一個編譯器指令或一個語句,其參數控制波特率等設置,並將UART(或其他I/O硬件)與流相關聯。您可以指定一個流名稱(如果您有多個串行端口)或使用默認值。然後你可以用通常的C字符例程訪問串行端口,並且當它接收到每個字符時會有一箇中斷。所以你的中斷程序讀取每個字符並將其放入緩衝區。