两种枚举串口的方式

Qt 串口类QSerialPort实现机制 在 Qt 中,串口通信主要是通过类实现的。这个类属于模块,提供了跨平台对串口(COM 口、串行口、USB 虚拟串口等)的访问。 阅读详情

以下是C++ Builder下调试过的两种枚举系统串口的代码

/* 函数名 : GetSerialPortsReg
*  说  明 : 通过注册表枚举系统串口数量,并列出所有串口的系统名
*
*  参  数 : pListStr, 串口名称列表
*  返回值 : int, 系统串口个数
*/
int GetSerialPortsReg(char (*pListStr)[80])
{
    HKEY hKey;
    LPCTSTR data_Set="HARDWARE//DEVICEMAP//SERIALCOMM//";
    long ret0 = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_READ, &hKey));

    if(ret0 != ERROR_SUCCESS)
    {
        return -1;
    }

    int i = 0;
    CHAR Name[25];
    UCHAR szPortName[80];
    LONG Status;

    DWORD dwIndex = 0;
    DWORD dwName;
    DWORD dwSizeofPortName;
    DWORD Type;

    dwName = sizeof(Name);
    dwSizeofPortName = sizeof(szPortName);

    do
    {
        Status = RegEnumValue(hKey, dwIndex++, Name, &dwName, NULL, &Type,
            szPortName, &dwSizeofPortName);

        if((Status == ERROR_SUCCESS)||(Status == ERROR_MORE_DATA))
        {
            if (pListStr != NULL)
            {
                memcpy(*(pListStr + i), (LPCSTR)szPortName, 80);
            }
            i++;
        }
    } while((Status == ERROR_SUCCESS)||(Status == ERROR_MORE_DATA));

    RegCloseKey(hKey);

    return i;
}

/* 函数名 : GetSerialPortsSys
*  说  明 : 通过系统信息枚举系统串口数量,并列出所有串口的系统名
*
*  参  数 : pListStr, 串口名称列表
*  返回值 : int, 系统串口个数
*/
int GetSerialPortsSys(char (*pListStr)[80])
{
    DWORD pcReturned = 0;
    DWORD pcbNeeded = 0;
    BYTE *outb = NULL;

    EnumPorts(NULL, 2, outb, 0, &pcbNeeded, &pcReturned);
    outb = new byte[pcbNeeded];
    EnumPorts(NULL, 2, &outb[0], pcbNeeded, &pcbNeeded, &pcReturned);
    PORT_INFO_2 *portsArray ;
    portsArray = (PORT_INFO_2 *)(outb);

    for (unsigned int i = 0; i< pcReturned; i++)
    {
        if (((AnsiString)(*(portsArray + i)).pPortName).Pos("COM") > 0)
        {
            memcpy(*(pListStr + i), (*(portsArray + i)).pPortName, 80);
        }
    }

    return pcReturned;
}

Qt6基础教程:串口通信与Qt Serial Port模块详解 本文详细介绍了Qt6 Serial Port模块的使用,包括QSerialPortInfo枚举串口及跨平台注意事项,QSerialPort的参数配置(波特率、数据位、停止位、校验位)的setter/getter函数与两种赋值方式,串口的打开/关闭,以及异步与同步两种数据读写方式,为串口通信编程提供了完整的基础教程。 阅读详情

相关推荐

嵌入式通信协议深度解析:从串口UART到USB的选型、调试与实战应用

在嵌入式系统与物联网开发中,有线通信协议是设备间数据交换的基石。串口通信,特别是基于UART的异步串行通信,以其协议简单、易于实现的特点,成为单片机调试、传感器数据采集等场景的经典选择。其核心在于通信双方需严格匹配波特率、数据位、停止位等参数,并通过起始位和停止位实现帧同步。而USB协议则构建了一个高度标准化、复杂且功能强大的现代通信体系,它通过分层的协议栈(物理层、链路层、协议层、应用层)、四种传输类型(控制、中断、批量、同步)以及设备描述符机制,实现了高速、可靠、支持即插即用和供电的智能连接。理解这两种

weixin_29522547的博客 245

枚举串口四法 【转】

串口作为最基本的电脑通信 I/O 接口,其使用虽然在 PC 上越来越少,但是在工业仪器领域仍然用的相当普遍,由于笔者工作中需要用到串口,而且发现枚举串口至今仍未搞得很清楚,为此自己先整理下,希望大侠和同行们对我不懂和错误的地方指点一下。 1 、查询注册表 查询注册表的方法是网上见到的比较常见的方法,该方法就是使用编程方法读取注册表内信息,相当于用户通过在运行框内输入 ”regedit” (...

weixin_30606461的博客 169

windows下枚举串口的方法,超好用,跟设备管理器枚举一样

在windows系统(win7、win10)上枚举串口,注册表方法跟SetupAPI方法,可枚举像设备管理器那样的信息

枚举电脑中的串口

我们一般对串口进行通信的时候,是自己指定的端口,但是个人感觉不是很方便,今天在网上找到了枚举串口的两种方法感觉很实用,不用自己去设备管理器查看串口了。 第一种方式 :通过注册表来枚举串口 void GetComList_Reg( CComboBox * CCombox ) { HKEY hkey; int result; CString strComName;//串

cxq_1993的专栏 1401

BCB6.0四种方法枚举电脑串口

BCB6.0用四种方法枚举电脑串口,第四种有个小bug,暂时没时间详查

windows枚举串口

该代码枚举出所有可用串口,并显示在combox控件中,在vs2008环境中运行成功

串口枚举的4种方法

我来做一下总结:     枚举串口、并口不同的系统有不同的做法:     对于NT4这能够使用CreateFile轮询的方法;     对于win9x可以使用读取注册表的方法;     对于win2000,XP可以使用几个API但是必须要连接WIN32   SDK的setupapi.lib     具体使用方法可以参考http://www.codeguru.com/system/SerialEnu

djimon的专栏 2819

C++ SerialEnum 串口枚举实例

C++ SerialEnum 串口枚举实例

枚举串口

 串口作为最基本的电脑通信 I/O 接口,其使用虽然在 PC 上越来越少,但是在工业仪器领域仍然用的相当普遍,由于笔者工作中需要用到串口,而且发现枚举串口至今仍未搞得很清楚,为此自己先整理下,希望大侠和同行们对我不懂和错误的地方指点一下。   1 、查询注册表 查询注册表的方法是网上见到的比较常见的方法,该方法就是使用编程方法读取注册表内信息,相当于用户通过在运行框

ronin技术空间 801

易语言枚举串口

易语言枚举串口源码系统结构:注册表操作_打开注册表项,注册表操作_枚举子键,注册表操作_关闭键,注册表操作_枚举键值,DLL命令1, ======窗口程序集1 || ||------__启动窗口_创建完毕 || || =

I-Cache 和 D-Cache

I-Cache 和 D-Cache

liuyuanbin9001 7022

Java中的串口编程

问题描述:使用Android串口与外部设备进行通信,Android串口通信介绍较多的是开源项目android_serialport_api项目,而对于一般的Java中的串口编程知识,学习下应该许多地方是可以借鉴的。于是参考了一些网络资源进行了了解。以下的Java串口编程需要下载comm驱动,这个驱动我没有使用,这里只是学习其思路,这个驱动应该是用于win32的,因此在Android下是不能直接使用

suxiang198的博客 1173

混合部署 操作系统混合部署

在openEuler Embedded 22.03中,已经集成了OpenAMP相关支持,并与openEuler的SIG Zephyr合作实现了openEuler Embedded与实时操作系统Zephyr在QEMU平台上的混合部署。具体的混合部署方式取决于设备的硬件和软件支持。例如,可以使用虚拟机软件(如VirtualBox)在Linux操作系统上运行Android虚拟机,从而实现Linux和Android的混合部署。需要注意的是,混合部署涉及到设备的硬件和软件兼容性,以及操作系统的配置和管理。

dianqicyuyan的博客 1763

通过编写串口助手工具学习MFC过程——(九)自动识别串口的方法

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉。这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅。做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然。另外做此工具只是为了熟悉了解,许多功能还没有完善...

weixin_30838873的博客 614

STM32F0实现数字化SPWM纯正弦波逆变器

这个没啥好说的,搭电路的事。其核心思想是两边桥臂分别由两个180度相位差的正弦波与三角载波比较来控制,优点是在开关器件工作频率一样的情况下,输出PWM频率是单极性SPWM的2倍,能够明显减少谐波,因此只需要相对较小的电感和电容滤波器件就可以起到很好的滤波效果,提升了系统的性能,也精简了系统体积,降低了成本。而双极性pwm则是在整个正弦周期内,四只管子都在高频开关状态工作,对角线上的管子一起导通,另一对角线上管子互补导通,实际上只需要一路互补的PWM控制,负载上电压在正电压和负电压之间切换,不出现0v。

forlifefor的专栏 1万+

基于cat12和SPM12进行VBM&SBM数据分析笔记1——数据预处理

基于cat12数据分析基础教程笔记 今年是小编步入研究生生活的第一年,研究方向待定,但主要以磁共振成像为主,以后会不断地总结这方面的知识,涉及MRI扫描,数据分析基础方法理论,软件操作教程,文献阅读笔记总结等等,用来记录我的研究生三年学习过程。编写尽量简洁明了,通俗易懂,本就是小白,也能体会小白的痛。不过这也要谢谢一个人手动@小白(网名),是他教我要把自己所学的写下来,讲出来才能真正的做到输入和输出,查漏补缺。而cat12软件操作是我面临的第一个数据分析的训练,写的可能也不会非常到位,还望各位专业人士指出改

Sophia2023的博客 4万+

C#中显现串口通信SerialPort类

C#中显现串口通信SerialPort类SerialPort类的常用属性SerialPort类的常用方法使用SerialPort类的方法:使用中的一些常见问题 SerialPort类的常用属性 名  称 说  明 BaseStream 获取 SerialPort 对象的基础 Stream 对象 BaudRate 获取或设置串行波特率 BreakState 获取或设置中断信号...

weixin_42288222的博客 586

使用 Mid360 从零开始搭建实物机器人入门级导航系统 —— 基于 Fast_Lio 和 Move_Base

本文详细介绍了如何使用Mid360机器人从零开始搭建一个基于Fast_Lio和Move_Base的入门级导航系统。通过配置 ROS2、集成激光雷达、IMU、Fast_Lio、Move_Base 等模块,我们成功构建了一个能够实现自动导航的机器人系统。在实际开发中,随着需求的变化,你可以不断调整参数、优化路径规划算法、增加新的传感器等,逐步提升机器人的智能与功能。

小蜗牛的珍贵百宝箱 3564

使用通用接口与设备进行 串口(SerialPort)、网口(Socket)通信

软件与设备通信,一般有两种通信方式: ①网络(Socket,TCP)通信,如软件与PLC之间进行通信。 ②串口(SerialPort,RS232)通信,如软件与测距仪之间进行通信。 新建控制台项目:CommunicationDemo。【.Net framework 4.5】 添加对SuperSocket客户端 SuperSocket.ClientEngine.dll 与SuperSocket.ProtoBase.dll 的引用 第一步、新建枚举文件CommunicationCategory.c..

ylq1045的专栏 4856

DDS协议--[第一章][概述]

Data Distribute Service,数据分发服务:数据分发服务(DDS™)是一个由对象管理组(OMG)发布的以数据为中心的中间件协议和API标准。DDS集成系统中的各个组件,提供低延迟数据连接、高可靠性以及高可扩展体系结构,以适应商业级物联网(IoT)应用程序的需求。

qq_41816308的博客 1152

95.qt qml-诺谦通用可扩展多功能QML界面

如下图所示:自带一个功能界面,可以通过功能界面添加不同功能,并且可以固定到顶部水平导航栏中,对于N多小功能的项目而言,非常方便,这样用户就可以根据自己喜好来使用自己常用的功能了。

抵抗时间扭曲,坚持做一件有意义的事 3048

QT枚举使用方法

Serial,Tcpxxxxxx。

Txwtech 195

【运动规划算法项目实战】如何使用Pure Pursuit算法进行路径跟踪(附ROS C++代码)

在自动驾驶和机器人导航领域,路径跟踪是一项关键技术,它使车辆或机器人能够按照预定的路径规划进行移动。路径跟踪算法的选择对于系统性能和安全性至关重要。本文将介绍一种常用且有效的路径跟踪算法——Pure Pursuit算法。我们将详细讨论Pure Pursuit算法的原理、实现步骤以及如何在自动驾驶和机器人系统中应用该算法进行路径跟踪。Pure Pursuit是一种用于路径跟踪的控制算法。它通过计算角速度控制机器人从当前位置移到机器人前方的某个预瞄点。假定线速度是恒定的,当然可以随意更改机器人的线速度。

xiewf的博客 1万+

vc串口枚举类

串口枚举类  一般计算机都带有串口,不同的计算机上所带有的串口数可能不同,比如一台计算机扩展了8个串口设备,或者零时插入一根USB转232的线,系统的串口数目可能发生变化,这种变化可能是固定的,也可能是变化的,在软件上要考虑这种变化,要能够随时探测系统当前究竟有多少个串口,为此写了个串口枚举类。每个串口设备均会在注册表中注册,通过读取注册表中的值就可以知道当前的串口数目和串口设备号等,

vrix的专栏 5377

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

串口编程 - windows如何枚举串口|获取活跃串口号

串口编程 - windows如何枚举串口|获取活跃串口号 CreateFile函数遍历、注册表和setupapi windows下枚举的串口可以分为如下几种类型: - 物理串口:RS232 - 虚拟串口:com0com 或 ELTIMA Virtual Serial Port 等 - 蓝牙转串口 - USB转串口 - STM32虚拟COM端口 (设备管理器显示 `STMicroelectronics Virtual COM Port`)

itas109的专栏 3080

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: 谈Delphi编程中“流”的应用
afraqiu
博客等级 码龄23年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值