【问题标题】:open serial port ANSI C打开串口ANSI C
【发布时间】:2014-05-10 13:48:38
【问题描述】:

在过去的几个小时(几天)中,我一直在谷歌上搜索一个简单的工作示例,说明如何在 Windows 上打开 ANSI C 中的串行端口。我尝试打开一个txt文件并将其逐个字符发送到串口。 (如果你能给我一个提示,我会很高兴如何以 1 秒的延迟发送一个字符一个字符!)这是我的代码,但不知何故它不起作用:(

FILE *file;
file = fopen("text.txt", "r");
if (file)
{
    while ((c = getc(file)) != EOF)
    {
        FILE *fp;
        fp = open("COM1", O_RDWR | O_NOCTTY | O_NDELAY);
        if (fp == -1) puts("Couldn't open port!");
        else puts("Port opened!");
        fprintf(fp,c);  
    }
    fclose(file);
}
else puts("Couldn't find text.txt!");

【问题讨论】:

  • 问题中缺少Windows 标签!
  • 您可能不想在每次循环迭代时都打开串行端口。 fprintf(fp,c); 也大错特错。

标签: c windows serial-port


【解决方案1】:

C 标准不了解串行端口。您的问题是特定于 Windows 的。也许你想

         fp = open("COM1:", O_RDWR | O_NOCTTY | O_NDELAY);
         if (fp<0) perror("open COM1:");

我不确定 Windows 上是否存在 openO_NDELAY(看起来像 Posix 或 Linux 代码!)

【讨论】:

  • 是的,我怀疑这是 LINUX,这就是为什么我要问它在 Windows 中是如何正确完成的 ^^
【解决方案2】:

我不认为您编写的代码可以在 Windows 中运行,除非您正在使用一些我不知道的 POSIX 库。否则,您必须使用用于串行通信的 Windows API 函数。

所有文档和一些示例都可以在 Microsoft 的文档站点 MSDN 上找到。

Windows 将串口视为文件。你用 CreateFile() 打开它们,用 ReadFile() 和 WriteFile() 读/写。然后还有各种函数用于设置波特率、握手、超时等。

如何详细做到这一点是一个相当大的话题,但至少 MSDN 上的信息应该可以帮助您入门。

【讨论】:

    猜你喜欢
    • 2011-04-07
    • 1970-01-01
    • 2013-08-16
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多