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查,看看就知道用法

  • 相关阅读:
    4-11 EurekaClient集成演示
    4-10 原始版服务调用演示
    4-9 Consumer内容准备
    4-8 Provider内容准备
    Swift:用UICollectionView整一个瀑布流
    Swift: 用Alamofire做http请求,用ObjectMapper解析JSON
    Swift: 用UserDefaults保存复杂对象
    BAT的真的适合创业团队吗?
    为什么要用GCD-Swift2.x
    Objective-C的泛型
  • 原文地址:https://www.cnblogs.com/skyofbitbit/p/3650205.html
Copyright © 2011-2022 走看看