【问题标题】:Basic example of serial communication with Windows XP/win32与 Windows XP/win32 进行串行通信的基本示例
【发布时间】:2008-10-26 03:39:35
【问题描述】:

我正在使用需要通过串行通信的外围设备。我可以使用超级终端向它发送命令,但现在我需要编写让我在没有超级终端的情况下执行此操作的程序。有人可以将我指向一个网站和/或向我展示一个示例 hello world 程序以帮助我入门吗?我搜索了许多网站,这些网站给了我无法编译/古老的 VC6 代码。

【问题讨论】:

    标签: windows winapi serial-port


    【解决方案1】:

    为了与串行端口连接,您打开一个具有特殊文件名“COM1”到“COM9”之一的文件。对于编号较大的串口,特殊文件名以\\?\开头,在C/C++代码中必须转义为“\\\\?\\COM10”等

    http://msdn.microsoft.com/en-us/library/ms810467.aspx 有一个很好的串口使用教程。请注意,您应该使用 Windows 文件 I/O 函数,例如 CreateFile()ReadFile()WriteFile()。我不确定是否可以使用标准 I/O 函数,例如 fopen()fread()fwrite()

    【讨论】:

    • 您认为链接的文章仍然相关吗?这些天有更好的方法吗?
    • @baordog 链接文章isn't good at all.
    【解决方案2】:

    Microsoft 提供an article with sample code 描述如何在 Win32 下执行此操作。

    【讨论】:

      【解决方案3】:

      Boost:asio 可能会提供帮助,因为最近添加了串行设备。

      不过是公平的警告;串行端口文档是light,大概是因为它很新(它是在 asio 1.1.1 中添加的,它包含在 boost 1.36 中)。

      但是,恕我直言,通过 asio 工作是比使用原始 Win32 API 更好的解决方案。为什么?它会更易于阅读和维护(它是更高级别的 API),并且它是跨平台的(除非您需要指定特定于操作系统的设备名称)。

      Boost - Usersasio.user 邮件列表非常活跃和友好,如果您遇到困难应该能够帮助您。

      【讨论】:

      • Boost 在多线程程序中的 Win32 错误检查方面做得很糟糕。它完全忽略了WaitForSingleObject 的返回值。如果您不介意尝试在线程程序中追踪他们的错误,则使用风险自负。
      【解决方案4】:

      如果使用 .NET 2.0,请参阅 System.IO.Ports 和 this article 应该会有所帮助。如果直接Win32,那么Adam's answer最好。

      【讨论】:

        【解决方案5】:

        如果您发现 VC6 过于古老,我相信您也会发现大量 C# 示例代码。我认为还有一堆“免费”的串行/COM 端口包装器,但我只是在编写 RS232 设备控制器软件时自己编写的。

        google C# 和串口或 rs232

        我得到了这些:

        http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx

        http://msmvps.com/blogs/coad/archive/2005/03/23/SerialPort-_2800_RS_2D00_232-Serial-COM-Port_2900_-in-C_2300_-.NET.aspx

        用谷歌搜索找到合适的代码应该没有问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多