当前位置:首页 > 操作系统 > Windows

WindowsAPI操作串口

 

#include <windows.h><span>
#include </span><stdio.h>

<span>int</span><span> main()
{
    </span><span>//</span><span>1.打开串口</span><span>    HANDLE hCom;
    hCom </span>= CreateFile(<span>"</span><span>COM1</span><span>"</span><span>,
        GENERIC_READ</span>|<span>GENERIC_WRITE,
        </span><span>0</span><span>,
        NULL,
        OPEN_EXISTING,
        </span><span>0</span><span>,
        NULL);
    </span><span>if</span> (hCom ==(HANDLE)-<span>1</span><span> )
        printf(</span><span>"</span><span>打开串口失败!n</span><span>"</span><span>);
    </span><span>else</span><span> 
        printf(</span><span>"</span><span>打开串口成功!n</span><span>"</span><span>);

    </span><span>//</span><span>2.初始化串口</span><span>    DCB dcb;
    GetCommState(hCom, </span>&<span>dcb);
    dcb.BaudRate </span>= <span>9600</span>;<span>//</span><span>波特率
    </span><span>//</span><span>dcb.fParity = 0;</span><span>//</span><span>奇偶校验使能</span>
    dcb.ByteSize = <span>8</span>;<span>//</span><span>数据位</span>
    dcb.Parity = NOPARITY;<span>//</span><span>奇偶校验</span>
    dcb.StopBits = ONESTOPBIT;<span>//</span><span>停止位</span>
    SetCommState(hCom, &<span>dcb);

    SetupComm(hCom, </span><span>1024</span>, <span>1024</span><span>);
    COMMTIMEOUTS TimeOuts;

    </span><span>//</span><span>设定读超时</span>
    TimeOuts.ReadIntervalTimeout = <span>1000</span><span>;
    TimeOuts.ReadTotalTimeoutConstant </span>= <span>5000</span><span>;
    TimeOuts.ReadTotalTimeoutMultiplier </span>= <span>500</span><span>;

    </span><span>//</span><span>设定写超时</span>
    TimeOuts.WriteTotalTimeoutConstant = <span>2000</span><span>;
    TimeOuts.WriteTotalTimeoutMultiplier </span>= <span>500</span><span>;

    SetCommTimeouts(hCom, </span>&<span>TimeOuts);

    </span><span>//</span><span>清空缓冲区</span>
    PurgeComm(hCom, PURGE_TXCLEAR|<span>PURGE_RXCLEAR);
    Sleep(</span><span>500</span><span>);

    </span><span>//</span><span>3.读写串口</span>
    unsigned <span>char</span> buf[<span>10</span>] = {<span>0x00</span>, <span>0x06</span>, <span>‘</span><span>D</span><span>‘</span>, <span>‘</span><span>A</span><span>‘</span>, <span>‘</span><span>T</span><span>‘</span>, <span>‘</span><span>A</span><span>‘</span><span>}; 
    BOOL bWriteStat;
    DWORD dwBytesWrite </span>= <span>6</span><span>;
    bWriteStat </span>= WriteFile(hCom, buf, dwBytesWrite, &<span>dwBytesWrite, NULL);
    </span><span>if</span> (!<span>bWriteStat)
    {
        printf(</span><span>"</span><span>写串口失败!n</span><span>"</span><span>);
    }
    </span><span>else</span><span> 
        printf(</span><span>"</span><span>写串口成功!n</span><span>"</span><span>);

    unsigned </span><span>char</span> rBuf[<span>1024</span><span>];
    BOOL bReadStat;
    DWORD dwBytesRead;
    bReadStat </span>= ReadFile(hCom, rBuf, <span>1024</span>, &<span>dwBytesRead, NULL);
    </span><span>if</span> (!<span>bReadStat)
    {
        printf(</span><span>"</span><span>读串口失败!n</span><span>"</span><span>);
    }
    </span><span>else</span><span>
    {
        printf(</span><span>"</span><span>读串口成功!n</span><span>"</span><span>);
    }
    </span><span>for</span> (DWORD j = <span>0</span>; j < dwBytesRead; j++<span>)
    {
        printf(</span><span>"</span><span>%x </span><span>"</span><span>, rBuf[j]);
    }
    printf(</span><span>"</span><span>n</span><span>"</span><span>);
    
    </span><span>//</span><span>4.关闭串口</span><span>    CloseHandle(hCom);
    </span><span>return</span><span>0</span><span>;
}</span>

 

原文:http://www.cnblogs.com/fwst/p/3729318.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐