欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

win32 串口 编程 (一)

程序员文章站 2024-02-22 10:08:58
...

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

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

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

OK
T

win32 串口 编程 (一)

win32 串口 编程 (一)

使用的设备是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 都是阻塞的方式进行的,需要进一步的调整。
以上只是演示使用。

相关标签: 串口