2009-07-29 128 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字符例程访问串行端口,并且当它接收到每个字符时会有一个中断。所以你的中断程序读取每个字符并将其放入缓冲区。