zoukankan      html  css  js  c++  java
  • 串口通讯编程一日通4(串口基本操作)

    前几篇大概介绍了串口的相关几个结构,了解后开始进入Windows API的基本操作

    1.CreateFile创建打开串口

    用指定的方式打开指定的串口,注意文件在Windows的概念很广泛,包括:文件、通讯设备、命名管道、邮件、磁盘和控制台。

    我们前面声明了句柄

     /*串口句柄*/
     HANDLE    m_hComm;

    那么接下来可以这样创建:

    m_hCom = CreateFile( "COM1",  //串口1

                                    GENERIC_READ | GENERIC_WRITE, //指定可以对串口进行读写操作

                                    0, //表示串口为独占打开

                                   NULL,

                                  OPEN_EXISTING, //表示当指定串口不存在时,程序将返回失败

                                  FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, //表示文件属性

    /*当打开串口时,必须指定 FILE_FLAG_OVERLAPPED(重叠方式),它表示文件或设备不会维护访问指针,则在读写时,必须使用OVERLAPPED 结构指定访问的文件偏移量。
    */

                                   NULL );


    2.ReadFile:读取串口数据

    声明如下:

    WINBASEAPI
    BOOL
    WINAPI
    ReadFile(
        HANDLE hFile,  //文件句柄
        LPVOID lpBuffer,//读写数据缓冲区
        DWORD nNumberOfBytesToRead,//多少数据要读取
        LPDWORD lpNumberOfBytesRead,//已经读取多少数据
        LPOVERLAPPED lpOverlapped//异步读写的结构
        );

    3.WriteFile:向串口写数据

    WINBASEAPI
    BOOL
    WINAPI
    WriteFile(
        HANDLE hFile,//文件句柄
        LPCVOID lpBuffer,//读写数据缓冲区
        DWORD nNumberOfBytesToWrite,//多少数据要写入
        LPDWORD lpNumberOfBytesWritten,//已经写入多少数据
        LPOVERLAPPED lpOverlapped//异步读写的结构
        );

    4.CloseHandle:关闭串口

    WINBASEAPI
    BOOL
    WINAPI
    CloseHandle(
        HANDLE hObject
        );

    5.GetCommState获取当前串口配置

    WINBASEAPI
    BOOL
    WINAPI
    GetCommState(
        HANDLE hFile,//通讯设备句柄
        LPDCB lpDCB//指向DCB
        );

    6.SetCommState配置串口

    WINBASEAPI
    BOOL
    WINAPI
    SetCommState(
        HANDLE hFile,//通讯设备句柄
        LPDCB lpDCB//指向DCB
        );

    7.SetCommTimeouts超时设置

    WINBASEAPI
    BOOL
    WINAPI
    SetCommTimeouts(
        HANDLE hFile,
        LPCOMMTIMEOUTS lpCommTimeouts//超时结构
        );

    8.ClearCommError清除错误标志

    WINBASEAPI
    BOOL
    WINAPI
    ClearCommError(
        HANDLE hFile,//通讯设备
        LPDWORD lpErrors,//错误掩码类型
        LPCOMSTAT lpStat
        );


    9.GetOverlappedResult 异步IO操作

    WINBASEAPI
    BOOL
    WINAPI
    GetOverlappedResult(
        HANDLE hFile,
        LPOVERLAPPED lpOverlapped,
        LPDWORD lpNumberOfBytesTransferred,
        BOOL bWait
        );

    10.WaitForSingleObject异步IO事件获取

    WINBASEAPI
    DWORD
    WINAPI
    WaitForSingleObject(
        HANDLE hHandle,
        DWORD dwMilliseconds
        );

    11.WaitForMultipleObjects等待多个事件

    WINBASEAPI
    DWORD
    WINAPI
    WaitForMultipleObjects(
        DWORD nCount,  //事件句柄组的事件组
        CONST HANDLE *lpHandles,//事件数组
        BOOL bWaitAll,//TRUE:所有事件发生才返回;FALSE:有一个事件发生就返回
        DWORD dwMilliseconds//等待时间
        );

    12.SetCommMask通信事件设置

    WINBASEAPI
    BOOL
    WINAPI
    SetCommMask(
        HANDLE hFile,
        DWORD dwEvtMask//事件码
        );

    13.GetCommMask当前通讯事件获取

    WINBASEAPI
    BOOL
    WINAPI
    GetCommMask(
        HANDLE hFile,
        LPDWORD lpEvtMask
        );

    14.WaitCommEvent通信事件监测

    WINBASEAPI
    BOOL
    WINAPI
    WaitCommEvent(
        HANDLE hFile,
        LPDWORD lpEvtMask,
        LPOVERLAPPED lpOverlapped
        );

    15.CreateEvent事件创建

    HANDLE CreateEvent(
        LPSECURITY_ATTRIBUTES lpEventAttributes,
        BOOL bManualReset,
        BOOL bInitialState,
        LPCSTR lpName
        );

    常用的就这么多了,不熟悉的去MSDN查,看看就知道用法

  • 相关阅读:
    TextBox 只有下划线
    can't find web control library(web控件库)
    DropDownListSalesAC”有一个无效 SelectedValue,因为它不在项目列表中。
    IDE、SATA、SCSI、SAS、FC、SSD 硬盘类型
    如何打印1px表格
    CSS控制打印 分页
    Virtual Server could not open its emulated Ethernet switch driver. To fix this problem, reenable the Virtual Server Emulated Et
    Xml中SelectSingleNode方法中的xpath用法
    热带水果莫入冰箱?水果存放冰箱大法
    探索Asp.net的Postback机制
  • 原文地址:https://www.cnblogs.com/skyofbitbit/p/3650205.html
Copyright © 2011-2022 走看看