如何在Windows平台上和Windows平台上控制串口的DTR和RTS引脚?我希望通过升高或降低其电压来对其进行位冲击或操作。

最佳答案

您将需要使用EscapeCommFunction函数,如下所示:

// winserial_io.cpp :  Win32 test program to control RTS and DTS output lines
// Originator: Steven Woon
// Creation Date: 2007-12-15

#include "stdafx.h"
#include "windows.h"
#include <conio.h>

//#include "winbase.h"

int main(int argc, char* argv[])
{
    HANDLE hComm;
    char ch;

    for (int i = 0; i < argc; i++)
        printf("%s\n", argv[i]);

    hComm = CreateFileA( argv[1],GENERIC_READ | GENERIC_WRITE,
                        0,
                        0,
                        OPEN_EXISTING,
                        NULL,
                        0);

    if (hComm == INVALID_HANDLE_VALUE)
    {
        printf("Cannot open %s\n", argv[1]);        //error occured alert user about error
        return -1;
    }

    printf("Press the following keys:\n");
    printf("1: Set DTR\n");
    printf("2: Clear DTR\n");
    printf("3: Set RTS\n");
    printf("4: Clear RTS\n");
    printf("q: End Program\n");

    do
    {
        ch = _getch();
        switch (ch)
        {
        case '1':   if (EscapeCommFunction(hComm,SETDTR) == 0)
                        printf ("Error Setting DTR\n");
                    break;
        case '2':   if (EscapeCommFunction(hComm,CLRDTR) == 0)
                        printf ("Error Clearing DTR\n");
                    break;
        case '3':   if (EscapeCommFunction(hComm,SETRTS) == 0)
                        printf ("Error Setting CTS\n");
                    break;
        case '4':   if (EscapeCommFunction(hComm,CLRRTS) == 0)
                        printf ("Error Clearing CTS\n");
                    break;
        }
    }   while (ch != 'q');


    return 0;
}

08-26 03:37