从串口读取数据

时间:2009-07-29 20:50:12

标签: c embedded serial-port

如何使用C从串口读取数据?然后再将数据传输到调制解调器? 我使用RS 232电缆进行串行通信......

5 个答案:

答案 0 :(得分:6)

有关在PC和设备端设备端口处理串口的大量有用信息,请访问Jan Axelson的网站Serial Port Complete

与端口的实际交互将是高度特定于平台的。在大多数风格的* nix上,您打开一个名为/dev/ttya的设备,并使用read()write()ioctl()来读取,写入和配置端口。

在Windows上,使用COM1函数打开名为\\.\COM1(或某些风格的CreateFile())的文件,然后对其进行配置并对SetCommState()等函数感到满意和DCB结构。详细信息与您在* nix上需要做的事情大致相似,但组织完全不同。您可以在MSDN找到有关配置和使用COM端口的整个讨论。

在嵌入式设备上,您将直接访问UART的硬件寄存器或与RTOS交互。无论哪种方式,基本上都没有办法让设备上的代码可以广泛移植。

答案 1 :(得分:2)

首先,这非常依赖于您使用的操作系统。

对于* nix类型,您通常打开串行端口设备,例如普通文件(例如/ dev / ttyS0),并开始读取或写入它。 至于Windows,我可以建议您搜索一个可靠的库,因为Windows串行通信可能是一个真正的噩梦。更重要的是,旧的Windows版本和从未版本的版本之间可能存在一些差异。

就个人而言,因为我是wxWidgets用户我使用wxCTB。 您应该寻找适合您正在使用的IDE的库。

一些免费链接;) www.robbayer.com/files/serial-win.pdf www.lookrs232.com/com_port_programming /

答案 2 :(得分:2)

在嵌入式领域,您的编译器将具有某种机制(通常是特定于编译器),允许它访问用于在设备内或外部存储器或IO映射设备中实现串行端口功能的硬件寄存器。这些寄存器定义通常由工具或处理器制造商提供,然后只是将配置控制值写入串行端口寄存器以设置其工作模式,然后从接收缓冲寄存器中读取数据。

听起来很简单但是,在MSP-430邮件列表中,USART编程问题是最常见的单一主题。

答案 3 :(得分:1)

为了扩展Ian的答案,典型的嵌入式c编译器将具有编译器指令或语句,其参数控制波特率等设置,并将UART(或其他I / O硬件)与流相关联。您可以指定流名称(如果您有多个串行端口)或使用默认值。然后,您可以使用通常的c字符例程访问串行端口,并在收到每个字符时出现中断。因此,您的中断例程会读取每个字符并将其放入缓冲区。

答案 4 :(得分:0)

在Windows领域,你最好找到一个可以让所有魔法发生的库。

就我个人而言,我正在使用Borland C ++组合小实用程序来与我的硬件(引导程序,配置和测试)交谈,我对在Delphi和BCC中都有效的TurboPower Async Professional Library非常满意并且是开放的来源(Mozilla Public License 1.1)。