首页 > 其他分享 >串口通信(CH340+CH9329)基础代码()

串口通信(CH340+CH9329)基础代码()

时间:2025-01-10 09:58:30浏览次数:1  
标签:PURGE return dcb dwBytesRead CH9329 hCom 串口 CH340

//   串口 向 9329 发送   键盘和鼠标信息 ==================
//        BOOL OpenCom() 打开串口
//        void Set_Com ()  初始化 串口 参数

//      int Read_Com( ) 读串口数据

//    int Write_Com()   写串口数据
HANDLE hCom; //全局变量,串口句柄
HANDLE OpenCom()    {
    HANDLE hCom = CreateFile(L"COM3",        
    GENERIC_READ | GENERIC_WRITE,
    0,
    NULL,
    OPEN_EXISTING,
    0,
    NULL);
    if (hCom == (HANDLE)-1)    {
        return NULL;
    }
return hCom ;
}


//  设置串口 超时
void Set_Com(HANDLE hCom) {
    SetupComm(hCom, 1024, 1024);  //输入缓冲区和输出缓冲区的大小都是1024
    COMMTIMEOUTS TimeOuts;   //设定读超时
    TimeOuts.ReadIntervalTimeout = 1000;
    TimeOuts.ReadTotalTimeoutMultiplier = 500;
    TimeOuts.ReadTotalTimeoutConstant = 5000;   //设定写超时
    TimeOuts.WriteTotalTimeoutMultiplier = 500;
    TimeOuts.WriteTotalTimeoutConstant = 2000;
    SetCommTimeouts(hCom, &TimeOuts);   //设置超时
    DCB dcb;
    GetCommState(hCom, &dcb);
    dcb.BaudRate = 9600;      //波特率为9600
    dcb.ByteSize = 8;      //每个字节有8位
    dcb.Parity = NOPARITY;   //无奇偶校验位
    dcb.StopBits = TWOSTOPBITS;   //两个停止位
    SetCommState(hCom, &dcb);  // 写入 设置数据
    PurgeComm(hCom, PURGE_TXCLEAR | PURGE_RXCLEAR);  // 清理 串口接受(Rx)和发送(Tx)缓冲区
}


int Read_Com(HANDLE hCom ){
    char lpInBuffer[1024];
    DWORD dwBytesRead = 1024;
    COMSTAT ComStat;
    DWORD dwErrorFlags;
    OVERLAPPED m_osRead;
    memset(&m_osRead, 0, sizeof(OVERLAPPED));
    m_osRead.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
    ClearCommError(hCom, &dwErrorFlags, &ComStat);
    dwBytesRead = min(dwBytesRead, (DWORD)ComStat.cbInQue);
    if (!dwBytesRead) return FALSE;
    BOOL bReadStatus;
    bReadStatus = ReadFile(hCom, lpInBuffer, dwBytesRead, &dwBytesRead, &m_osRead);
    if (!bReadStatus)        {            
        //如果ReadFile函数返回FALSE
        if (GetLastError() == ERROR_IO_PENDING)      

 {
            //GetLastError()函数返回ERROR_IO_PENDING,表明串口正在进行读操作
            WaitForSingleObject(m_osRead.hEvent, 2000);
            //使用WaitForSingleObject函数等待,直到读操作完成或延时已达到2秒钟
            //当串口读操作进行完毕后,m_osRead的hEvent事件会变为有信号, 
            PurgeComm(hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
        return dwBytesRead;
        }
    return 0;
    }
PurgeComm(hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
return dwBytesRead;
}

int Write_Com(HANDLE hCom, unsign wchar_t* buffer) {
    DWORD dwBytesWritten = 1024;
    DWORD dwErrorFlags;
    COMSTAT ComStat;
    OVERLAPPED m_osWrite;
    BOOL bWriteStat;
    bWriteStat = WriteFile(hCom, buffer, dwBytesWritten, &dwBytesWritten, &m_osWrite);
    if (!bWriteStat)
    {
        if (GetLastError() == ERROR_IO_PENDING)
        {
            WaitForSingleObject(m_osWrite.hEvent, 1000);
            return dwBytesWritten;
        }
        return 0;
    }
    return dwBytesWritten;
}

标签:PURGE,return,dcb,dwBytesRead,CH9329,hCom,串口,CH340
From: https://www.cnblogs.com/oujian/p/18118283

相关文章

  • 如何用串口调试助手ComTone调试串口?附安装包
    前言大家好,我是小徐啊。我们在调试应用的时候,有时候是需要进行串口通信的。但并不是每次都有实时的串口数据供我们去测试,这个时候就需要一个模拟生成串口数据的工具来帮助我们了。今天,小徐就来介绍下串口调试助手ComTone的用法。文末附获取方式。如何使用串口调试助手ComTone首......
  • day2-串口调制及相关参数设置
    自定义串口通信协议包头|数据4(1+1+2)2地址码(1byte)|功能码(1byte)|数据长度(2byte)|数据(不定长)|校验码(2byte)总线通信:        一条信号线上挂载了很多主机,地址码标识给谁发的SPI、串口、I2C给下位机发送消息,可能不仅仅一个功能,标识功能256(0-255)数据长......
  • ESP8266 wifi模块+CH340烧录板安装使用运行教程
    硬件准备ESP8266-01S 模块USB转TTL烧录板(CH340)LED灯(建议使用3.3VLED)220Ω电阻(LED限流)面包板和跳线若干 我的是这样的不用接线,其他的参考ESP8266-01S引脚定义:VCC---3.3VGND---GNDTX---USB转TTL的RXRX---USB转TTL的TXCH_PD(EN)-......
  • linux系统串口终端软件显示异常解决方法,触觉智能出品
    本文介绍linux系统串口终端软件显示异常解决方法,以xshell软件为例。使用触觉智能的PurplePiR1双网口开发板演示,内置双核A71.2Ghz处理器,支持WiFi与丰富GPIO拓展,是嵌入式新人入门学习的高性价比开发板!使用resize命令调整终端命令终端大小不对的情况如下图:使用resize命令调整......
  • “非旺玖原装的PL2303,请联系您的供应商”232串口转换器解决办法
    偶尔会用到PL2303这种十几年前的旧芯片做的232串口转换器,如果手头没有别的工具必须使用的话,需要配置一下才能使用。该串口调试器在不同的USB口插入可能出现COM口无效或者端口号变动(COM4/7/8等),需要通过设备管理器进行修改当提示题目上的错误时,需要重装旧版本驱动123......
  • 5G终端串口AT命令 FM650 常用命令
    5G终端串口AT命令FM650常用命令5G终端串口AT命令FM650常用命令#状态查询MODULE_PORT=/dev/ttyUSB0echo-e"ATE0\r\n">$MODULE_PORTecho-e"AT+GTUSBMODE?\r\n">$MODULE_PORTecho-e"AT+GTRAT?">$MODULE_PORTecho-e"AT+C......
  • jssc库实现读取485串口数据
    1.添加依赖点击查看代码<dependency><groupId>org.scream3r</groupId><artifactId>jssc</artifactId><version>2.8.0</version></dependency>2.创建工具类点击查看代码packagecom.p......
  • Arduino串口输出函数print()和write()的联系和区别
    write()传送的是ASCII的十进制的值(如65),而print()传送的是ASCII的文本(如A)1、当参数是字符串时,两者效果相同。因为write()先把字符文本转换成ASCII值,然后转译成ASCII文本,故与print()的效果相同例如:print("abc")和write("abc")都输出:abc       print("123......
  • 串口 RS-485/RS-422 . RS-232 区别/比较/接线图
    串口RS-485/RS-422.RS-232区别/比较/接线图  一、串口接线RS-232:RXD,TXD连线TXD,RXDRS-485: A,B连线A,BRS-422:RX-A,RX-B,TX-A,TX-B 连线 TX-A,TX-B,RX-A,RX-B RS-232 :RXD,TXD连线TXD,RXDRS-485 : A,B连线A,BRS-422......
  • CH340C 请求 USB 设备描述符失败
    简短不看版如果出现上述状况,说明线有问题:线的确是数据线(不是电源线),但是不是能与CH340正常通讯的数据线(数据线的数据传输功能有问题。需要更换其它数据线. 前文    该文分享CH340驱动使用过程可能出现的问题,以下出现的问题解决方案都建立在CH340硬件正常的情况下。......