【问题标题】:Read data from serial port从串口读取数据
【发布时间】:2009-07-29 20:50:11
【问题描述】:

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

【问题讨论】:

  • 你肯定需要为这个问题添加更多信息。

标签: c embedded serial-port


【解决方案1】:

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

与端口的实际交互将高度特定于平台。在大多数风格的 *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/

    【讨论】:

    • 不太适用于嵌入式(它被标记为“嵌入式”)。
    • 不正确。嵌入式通常是指Linux或WinCE。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        就我个人而言,我正在使用 Borland C++ 将小型实用程序放在一起与我的硬件(引导加载程序、配置和测试)通信,我对在 Delphi 和 BCC 中都可以使用并且是开源的 TurboPower Async Professional Library 非常满意( Mozilla 公共许可证 1.1)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-06
          • 1970-01-01
          相关资源
          最近更新 更多