win32 串口 编程 (一)

串口监控工具推荐使用AccessPort或PortMon,这两款软件都是免费的。
http://www.sudt.com/
SUDT AccessPort 1.37 (Freeware) (免费的 win7 下面可以使用,但是拷贝数据的时候,不能拷贝十六进制)

下面的图片使用的软件是 Device Monitoring Studio

发送:41 54 0D 0A
接收到的是
AT

OK
T

这里写图片描述

这里写图片描述

使用的设备是TC35模块,该模块支持AT指令,该模块在长时间上电之后,如果D8这个灯不闪了,需要重启一下板子

发送数据:41 54 0D 0A —– 4个数据
接收数据:41 54 0D 0D 0A 4F 4B 0D 0A —– 9个数据

用VC 建立一个console控制台 工程:代码如下:

// seiralTA.cpp : 定义控制台应用程序的入口点。
//

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


int _tmain(int argc, _TCHAR* argv[])
{

    DWORD dwLength;  
    char recvBuf[1024] ;  
    DWORD dwactlen;  
    char psendbuf[32] = "AT\r\n";  
    DCB myDCB;  
    HANDLE m_hComm;  

    memset(recvBuf,0,sizeof(recvBuf));
    m_hComm = CreateFile(  
                                _T("COM6:"),  
                                GENERIC_READ | GENERIC_WRITE,   //允许读和写  
                                0,                          //独占方式(共享模式)  
                                NULL,  
                                OPEN_EXISTING,              //打开而不是创建(创建方式)  
                                0,  
                                NULL  
                                );  

    //得到打开串口的当前属性参数,修改后再重新设置串口。  

    if (!GetCommState(m_hComm,&myDCB))  
    {  
        printf("GetCommState error");  
        return FALSE;  
    }  

    //设置串口参数  
    myDCB.BaudRate = CBR_9600;   // 设置波特率9600  
    myDCB.fBinary = TRUE; // 设置二进制模式,此处必须设置TRUE  
    myDCB.fParity = FALSE; // 支持奇偶校验  
    myDCB.fOutxCtsFlow = FALSE;  // No CTS output flow control  
    myDCB.fOutxDsrFlow = FALSE;  // No DSR output flow control  
    myDCB.fDtrControl = DTR_CONTROL_DISABLE; // No DTR flow control  
    myDCB.fDsrSensitivity = FALSE; // DSR sensitivity  
    myDCB.fTXContinueOnXoff = TRUE; // XOFF continues Tx  
    myDCB.fOutX = FALSE;     // No XON/XOFF out flow control  
    myDCB.fInX = FALSE;        // No XON/XOFF in flow control  
    myDCB.fErrorChar = FALSE;    // Disable error replacement  
    myDCB.fNull = FALSE;  // Disable null stripping  
    myDCB.fRtsControl = RTS_CONTROL_DISABLE;   //No RTS flow control  
    myDCB.fAbortOnError = FALSE;  // 当串口发生错误,并不终止串口读写  
    myDCB.ByteSize = 8;   // 数据位,范围:4-8  
    myDCB.Parity = NOPARITY; // 校验模式  
    myDCB.StopBits = 0;   // 1位停止位  
    //设置串口参数  
    if (!SetCommState(m_hComm, &myDCB))  
    {  
        printf("SetCommState error");  
        return FALSE;  
    }  


    if(WriteFile(m_hComm, psendbuf, strlen(psendbuf), &dwactlen, NULL))  
    {  
        printf("write success!\n");  
    }  
    else  
    {  
        printf("write failed!\n");  
    }  

    if(ReadFile(m_hComm, recvBuf, 9, &dwLength, NULL))  
    {  
        printf("read success!\nread string: %s", recvBuf);  
    }  
    else  
    {  
        printf("read failed!\n");  
    }  

    CloseHandle(m_hComm); //m_hComm是CreateFile函数返回的串口句柄。  


    return 0;
}

log 如下:

write success!
read success!
read string: AT
OK
请按任意键继续. . .

注意,在用程序与串口通信的时候,需要关闭掉 其他的串口通信软件,占用该串口号

这个程序中WriteFile 和 ReadFile 都是阻塞的方式进行的,需要进一步的调整。
以上只是演示使用。

猜你喜欢

转载自blog.csdn.net/wowocpp/article/details/80500180