从串口读取数据

5

我该如何使用C语言从串口读取数据?然后再将这些数据传输给调制解调器?我正在使用RS 232电缆进行串口通信...


1
你肯定需要在这个问题中添加更多信息。 - Johan
5个回答

6
在Jan Axelson的书籍Serial Port Complete相关网站上,可以找到大量有关处理PC和设备端串口的有用信息。
实际与串口的交互将高度特定于平台。在大多数*nix系统上,您需要打开名为/dev/ttya之类的设备,并使用read()write()ioctl()来读取、写入和配置串口。
在Windows上,您可以使用CreateFile()函数打开名为COM1(或某些版本上的\\.\COM1)的文件,并使用SetCommState()DCB结构之类的函数进行配置和操作。虽然细节与*nix上需要执行的操作类似,但组织方式完全不同。您可以在MSDN找到有关配置和使用COM端口的完整讨论。
在嵌入式设备上,您将直接访问UART的硬件寄存器或与RTOS交互。无论哪种方式,设备端的代码基本上无法广泛移植。

2
首先,这非常依赖于您使用的操作系统。
对于*nix类型,通常会像打开普通文件一样打开串行端口设备(例如/dev/ttyS0),并开始从中读取或写入。 至于Windows,我建议您搜索可靠的库,因为Windows串行通信可能会成为真正的噩梦。此外,旧版Windows和新版Windows之间可能存在一些差异。
就个人而言,因为我是wxWidgets用户,所以我使用wxCTB。 您应该寻找适合您正在使用的IDE的库。
一些免费链接;) www.robbayer.com/files/serial-win.pdf www.lookrs232.com/com_port_programming/

不太适用于嵌入式系统(已标记为“嵌入式”)。 - Craig McQueen
不是真的。嵌入式通常指Linux或WinCE。 - Andrejs Cainikovs

2
在嵌入式领域,您的编译器将有一些机制(通常是特定于编译器的),允许它访问用于实现串口功能的硬件寄存器,无论是在设备内部还是在外部存储器或IO映射设备中。这些寄存器定义通常由工具或处理器制造商提供,然后只需将配置控制值写入串行端口寄存器以设置其操作模式,然后从接收缓冲区寄存器中读取数据。听起来很简单,但在MSP-430邮件列表中,USART编程问题是最常见的单个主题。

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

0
在Windows领域中,最好找到一个库来实现所有的魔法。
个人而言,我使用Borland C++来组合小型实用程序,以与我的硬件进行通信(引导加载程序、配置和测试),我非常满意TurboPower Async Professional Library,它可以在Delphi和BCC中使用,并且是开源的(Mozilla Public License 1.1)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接