Window串口编程

    利用Windows应用程序编程接口为程序提供串口通信功能

    1.串行编程的数据结构:DCB(Device Control Block)、CIMMTIMEOUTS

    DCB:设备控制块
        通过该数据结构,完成对串口端的初始化工作   该数据结构包含了  传输波特率、数据位数、奇偶检验类型和停止位数等参数
        在查询或者配置串行端口的属性时,需要使用DCB数据结构作为缓冲区

    Win32 API
        USER32.DLL      负责窗口管理,包括消息、菜单、光标、通信、计时器和其它与控制窗口显示
        GDI32.DLL        提供图形设备接口、管理用户界面和图形绘制,包括Windows元文件、位图、设备描述符和字体等
        KERNEL32.DLL    处理存储器底层功能、任务和资源管理等windows核心服务

Win16:
    打开和关闭串口
        OpenComm() 打开串口资源,并指定输入、输出缓冲区的大小
        CloseComm() 关闭串口

            int idComDev;
            idComDev = OpenComm("COM1",1024,128);
            CloseComm(idComDev);

    2.初始化串口,设置串口参数
        BuildCommDCB()、SetCommState()填写设备控制块DCB  然后对已打开的串口进行参数配置
        
            DCB dcb;
            BuildCommDCB("COM1:2400,n,8,1",&dcb);
            SetCommState(&dcb);
    3.读写串口,收发数据
        ReadComm、WriteComm 对串口进行读写操作  数据的接收和发送

            char *m_pReceive;
            int count;
            ReadComm(idComDev,m_pReceive,count);
            char wr[30];
            int count2;
            WriteComm(idComDev,wr,count2);

    16位下的串口等外部设备操作 有自己特有的API函数  而32位程序则把串口操作(以及并口)和文件系统操作关联在了一起

串口编程中常用到的结构及相关的概念

    1. DCB(Device Control Block) 结构
        GetCommState()可以用来获得串口的配置  
            将当前配置填充到一个DCB结构中    
            在用CreateFile 打开串行口后,可以调用GetCommState函数来获取串行口的初始配置
            然后修改DCB结构  再调用SetCommState函数用指定的DCB结构来设置串行口

            typedef struct _DCB {
                DWORD DCBlength;      /* DCB结构大小                     */
                DWORD BaudRate;       /* 当前波特率                      */
                DWORD fBinary: 1;     /* 二进制模式,不检测EOF           */
                DWORD fParity: 1;     /* 允许奇偶校验                    */
                DWORD fOutxCtsFlow:1; /* CTS 输出流控制                  */
                DWORD fOutxDsrFlow:1; /* DSR 输出流控制                  */
                DWORD fDtrControl:2;  /* DTR 流控制类型                  */
                DWORD fDsrSensitivity:1; /* DSR 信号线是否敏感           */
                DWORD fTXContinueOnXoff: 1; /* XOFF continues Tx         */
                DWORD fOutX: 1;       /* XON/XOFF 输出流控制             */
                DWORD fInX: 1;        /* XON/XOFF 输入流控制             */
                DWORD fErrorChar: 1;  /* 允许错误替换                    */
                DWORD fNull: 1;       /* 允许剥离去掉NULL字符            */
                DWORD fRtsControl:2;  /* Rts 流控制                      */
                DWORD fAbortOnError:1; /* 有错误是终止读/写操作          */
                DWORD fDummy2:17;     /* 保留                            */
                WORD wReserved;       /* 当前不用                        */
                WORD XonLim;          /* XON发送字符之前缓冲区中允许接收最小字节数         */
                WORD XoffLim;         /* XON发送字符之前缓冲区中允许接收最小可用字节数         */
                BYTE ByteSize;        /* 数据位数                        */
                BYTE Parity;          /* 奇偶校验0-4 表示:不校验 奇校验 偶校验 标号 空格   */
                BYTE StopBits;        /* 停止位 0,1,2 = 1, 1.5, 2               */
                char XonChar;         /* 发送和接收的 XON 字符           */
                char XoffChar;        /* 发送和接收的 XOFF 字符          */
                char ErrorChar;       /* 替换接收到的奇偶校验发生错误的字符         */
                char EofChar;         /* 输入数据结束字符                */
                char EvtChar;         /* 接收到的事件字符                */
                WORD wReserved1;      /* 保留位 不用                     */
            } DCB, *LPDCB;

    DCB 结构参数说明
        DCBlength:
            以字节为单位设置DCB结构长度大小

        BaudRate:
            设置波特率(串口传输速率) 可以以实际数据表示  如9600等
          或 CBR_110 CBR_300 CBR_1200 CBR_2400 CBR_4800 CBR_9600 CBR_14400 CBR_19200等

        fBinary:
            是否允许二进制传输 Win32API 不支持非二进制方式传输  因此 该参数必须设置为TRUE

        fParity:
            是否允许奇偶校验 如果设置为TRUE 则进行就校验并报告错误信息

        fOutxCtsFlow:
            指定CTS(clear-to-send)信号是否检测输出流控制 该值为TRUE且CTS为off时,发送被暂停 直至CTS被重新置为on

        fOutxDsrFlow:
            指定DSR(data-set-ready)信号是否检测输出流控制 该值为TRUE且DSR为off时,发送被暂停 直至DSR被重新置为on

        fDtrControl:
            设置DTR(data-terminal-ready)流控制
                DTR_CONTROL_DISABLE 当串口被打开时  禁止DTR线 并保持禁止状态
                DTR_CONTROL_ENABLE  当串口被打开时 允许DTR线 并保持允许状态
                DTR_CONTROL_HANDSHAKE 允许DTR握手  如果handshaking被打开  不允许使用EscapeCommFunction函数 调整线路状态

        fDsrSensitivity:
            设置通信驱动程序对DTR信号是否敏感 如果该值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值