当前位置: 首页 > news >正文

串口通讯:

一、

1.在用ReadFile和WriteFile读写串口时,既可以同步执行,也可以重叠执行
    在同步执行时,函数直到操作完成后才返回。这意味着同步执行时线程会被阻塞,从而导致效率下降。
    在重叠执行时,即使操作还未完成,这两个函数也会立即返回,费时的I/O操作在后台进行。
2.ReadFile和WriteFile函数是同步还是异步由CreateFile函数决定:
    如果在调用CreateFile创建句柄时<指定了FILE_FLAG_OVERLAPPED标志>,那么调用ReadFile和WriteFile对该句柄进行的操作就应该是重叠的;
    如果未指定重叠标志,则读写操作应该是同步的。
ReadFile和WriteFile函数的同步或者异步应该和CreateFile函数相一致。

3.ReadFile函数只要在串口 <输入缓冲区> 中读入指定数量的字符,就算完成操作。
  WriteFile函数不但要把指定数量的字符拷入到 <输出缓冲区>,而且要 <等> 这些字符从串行口 <送出去>后才算完成操作。
如果操作成功,这两个函数都返回TRUE。
      需要注意的是,当ReadFile和WriteFile <返回FALSE时,不一定就是操作失败>,线程应该调用GetLastError函数分析返回的结果。
        例如,在重叠操作时如果操作还未完成函数就返回,那么函数就返回FALSE,而且GetLastError函数返回ERROR_IO_PENDING:这说明重叠操作还未完成,正在后台运行。

3.重叠I/O非常灵活,它也可以实现阻塞(例如我们可以设置一定要读取到一个数据才能进行到下一步操作)。
两种方法可以 <等待> 操作完成:
    一种方法是用像WaitForSingleObject这样的等待函数来等待OVERLAPPED结构的hEvent成员;
    另一种方法是调用GetOverlappedResult函数等待

二、串口通讯大致步骤:

(一)、open()打开串口“读”

1 打开串口函数(以异步(重叠)IO打开串口)m_hCommHandle标识通讯端口的句柄

    m_hCommHandle = CreateFile(szComm,          //COM

                    GENERIC_READ | GENERIC_WRITE,   //允许读和写

                    0,                              //独占方式

                    NULL,

                    OPEN_EXISTING,                  //打开而不是创建

                    FILE_FLAG_OVERLAPPED,           //重叠方式

                    NULL);

2获取串口当前配置函数

    GetCommState(m_hCommHandle, &dcb);

        dcb.BaudRate = dwBaudRate;//当前波特率

        dcb.ByteSize = byByteSize;//数据位数

        dcb.Parity = byParity;//奇偶校验

        dcb.StopBits = byStopBits;//停止位

3配置串口函数(设置COM口的设备控制块)

    SetCommState(m_hCommHandle, &dcb))

4将串口DTR线路升成高电位

    EscapeCommFunction(m_hCommHandle, SETDTR);

    要实现自己的流控制时。此时应用必须负责RTSDTR信号线的状态改变。

5设置串行口的输入和输出缓冲区的大小

    SetupComm(m_hCommHandle, 4096, 4096))

6在读写串口之前,要用PurgeComm()函数清空缓冲区,终止正在进行的读写操作

    PurgeComm(m_hCommHandle, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR))//清空缓冲区

7创建一个线程用于接收串口的数据

8、线程函数中“实时读串口”

8.1 设置要监控的事件

SetCommMask(m_hCommHandle, EV_RXCHAR | EV_ERR);

    EV_RXCHAR输入缓冲区中已收到数据

8.2 等待串口通信事件的发生;

WaitCommEvent(m_hCommHandle, &dwMask, &m_eventOverlapped))

    GetOverlappedResult该函数返回重叠操作的结果:用来判断异步操作是否完成;

8.3 读串口 ReadFile()数据:

    GetOverlappedResult该函数返回重叠操作的结果:用来判断异步操作是否完成;

8.4 接收完成后,进入RecvDataEvent响应函数(注册过SerialPort的类会实现RecvDataEvent函数)

()Send()发送数据,写串口

9、写串口

9.1 立即终止异步发送+清空发送缓存区

    PurgeComm(m_hCommHandle, PURGE_TXABORT | PURGE_TXCLEAR);

9.2 写串口

    WriteFile(m_hCommHandle, vpData, dwDataLen, &dwWriteLen, &m_writeOverlapped)

    GetOverlappedResult该函数返回重叠操作的结果:用来判断异步操作是否完成;

9.3 调用子类的回调函数SendDataEvent函数,实现发送

()close()关闭串口

10. 关闭串口

    WaitForSingleObject(m_hThread, INFINITE);//等线程结束后关闭

    CloseHandle(m_hThread);//关闭线程句柄

    EscapeCommFunction(m_hCommHandle, CLRDTR);//DTR线路降成低电位

    PurgeComm(m_hCommHandle, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR); //终止读写/清空缓冲区函数

    CloseHandle(m_hCommHandle);//关闭串口

相关文章:

串口通讯:

一、 1.在用ReadFile和WriteFile读写串口时&#xff0c;既可以同步执行&#xff0c;也可以重叠执行&#xff1a; 在同步执行时&#xff0c;函数直到操作完成后才返回。这意味着同步执行时线程会被阻塞&#xff0c;从而导致效率下降。 在重叠执行时&#xff0c;即使操作…...

批量重命名软件推荐 A Better Finder Rename 12最新 for mac

A Better Finder Rename的大量重命名选项被组织成15个直观的类别&#xff0c;涵盖了一个伟大的文件重命名器所期望的所有文本&#xff0c;字符&#xff0c;位置&#xff0c;转换和截断功能。 除此之外&#xff0c;A Better Finder Rename提供了更多高级功能&#xff0c;可以满…...

【2013年数据结构真题】

highlight: a11y-dark 41题 王道解析&#xff1a; 算法的策略是从前向后扫描数组元素&#xff0c;标记出一个可能成为主元素的元素Num 。然后重新计数&#xff0c;确认Num是否是主元素。算法可分为以下两步&#xff1a; 选取候选的主元素&#xff1a;依次扫描所给数组中的每个…...

csrf学习笔记总结

跨站请求伪造csrf csrf概述 掌握CSRF 漏洞原理 掌握CSRF 漏洞场景 掌握CSRF 漏洞验证 csrf原理 ​ 跨站请求伪造&#xff08;Cross Site Request Forgery&#xff0c;CSRF&#xff09;是一种攻击&#xff0c;它强制浏览器客户端用户在当前对其进行身份验证后的Web 应用程…...

【kafka】windows安装启动

1.zookeeper的安装与启动 快速打开window powershell&#xff1a; windowx&#xff0c;选 2.kafka下载 —注意kafka和zookeeper需要版本匹配 安装路径 注意&#xff0c;kafka安装目录不能有空格。文件下载到&#xff1a; D:\Program_Files\kafka_2.12-3.6.0新建logs文件 修改c…...

redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。

大家如果对使用netty搞这些http请求什么的感兴趣的&#xff0c;可以参观我自己创建的这个项目。 nanshaws/nettyWeb: 复习一下netty&#xff0c;并打算做一个web项目出来 (github.com) Redis的基本命令包括&#xff1a; SET key value&#xff1a;设置指定key的值。 GET key…...

《白帽子讲web安全》笔记

第八章 文件上传漏洞 文件上传漏洞是指用户上传了一个可执行的脚本文件&#xff0c;并通过此脚本文件获得了执行服务器端命令的能力 文件上传后导致的常见安全问题一般有&#xff1a; ❍ 上传文件是Web脚本语言&#xff0c;服务器的Web容器解释并执行了用户上传的脚本&#xf…...

unity UGUI无限循环滚动居中

最近在做一个ui循环滚动的功能&#xff0c;网上找了半天脚本感觉都和我实际需求不太符合&#xff0c;自己花费一些时间完成了这个功能记录一下。下面开始正题 &#xff0c;我是采用unity自带组件Scroll View来完成&#xff0c;首先设置Scroll View如下图 面板层级结构如下 然…...

人工智能与新能源电动车的融合——技术创新引领未来交通革命

人工智能与新能源电动车的融合——技术创新引领未来交通革命 摘要&#xff1a;本文探讨了人工智能与新能源电动车领域的技术融合&#xff0c;分析了其在智能驾驶、电池技术、充电设施等方面的应用与创新。文章指出&#xff0c;这两大技术的结合将重塑交通产业&#xff0c;为我…...

交换机堆叠 配置(H3C)堆叠中一台故障如何替换

交换机堆叠 配置&#xff08;H3C&#xff09;堆叠中一台故障如何替换 堆叠用来干什么&#xff1f;配置两台成员设备的 IRF&#xff08;堆叠&#xff09;Switch01配置Switch02配置 如何替换堆叠中坏掉的一台交换机 堆叠用来干什么&#xff1f; 一台交换机网口有限&#xff0c;无…...

2024年软考有哪些考试科目?具体考什么内容?

软考分为三个考试层次&#xff0c;软考初级、中级和高级&#xff0c;每个层次的考试科目&#xff0c;其考试内容都是不一样的。报考时先选层次&#xff0c;再选科目。选好科目后&#xff0c;再看自己需要学习哪些内容。 一、软考初级科目 1.程序员&#xff1a; 考核内容&…...

2023.11.12 hive中分区表,分桶表与区别概念

1.分区表 分区表的本质就是在分目录 当Hive表对应的数据量大、文件多时&#xff0c;为了避免查询时全表扫描数据。比如把一整年的数据根据月份划分12个月&#xff08;12个分区&#xff09;&#xff0c;后续就可以查询指定月份分区的数据&#xff0c;尽可能避免了全表扫描查询。…...

Pass-中间件管理

中间件管理是指对应用软件和操作系统之间的软件层进行管理和调度的过程&#xff0c;以优化应用性能和提高系统可靠性。 中间件管理是什么&#xff1f; 中间件管理是软件开发过程中不可或缺的一部分&#xff0c;它主要负责管理应用程序与操作系统之间的交互。中间件&#xff0…...

什么是GIL锁,有什么作用?python的垃圾回收机制是什么样的?解释为什么计算密集型用多进程,io密集型用多线程。

1 什么是gil锁&#xff0c;有什么作用&#xff1f; 2 python的垃圾回收机制是什么样的&#xff1f; 3 解释为什么计算密集型用多进程&#xff0c;io密集型用多线程。 1 什么是gil锁&#xff0c;有什么作用&#xff1f; 1 GIL&#xff1a;Global Interpreter Lock又称全局解释器…...

Postman如何发送Https请求

Postman如果想要发送Https请求&#xff0c;需要从设置中将SSL安全认证禁用...

Redis集群启动

配置项 # 允许Redis监听所有网络接口的IP地址,即0.0.0.0。这意味着Redis可以接受来自任何网络接口的连接。 bind 0.0.0.0 # 关闭保护模式。在保护模式下,Redis只接受来自本机的连接。关闭保护模式后,Redis可以接受来自任何网络接口的连接。 protected-mode no # 在后…...

使用proxy把后端返回的图片域名替换成目标域名

proxy 对象用于创建一个对象的代理&#xff0c;是在目标对象之前架设一个拦截&#xff0c;外界对该对象的访问&#xff0c;都必须先通过这个拦截。通过这种机制&#xff0c;就可以对外界的访问进行过滤和改写。 ES6 原生提供 Proxy 构造函数&#xff0c;用来生成 Proxy 实例。…...

css实现div倾斜效果

效果如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head> <style> *{margin:0;padding: 0;} .box1{margin:30px 100px;width:100px;height:200px;background:blueviolet;} …...

算法学习打卡day45|动态规划:股票问题总结

Leetcode股票问题总结篇 动态规划的股票问题一共六道题&#xff0c;买卖股票最佳时机和买卖股票手续费都是一个类型的问题&#xff0c;维护好买入和卖出两个状态即可&#xff0c;方法一摸一样。而冷冻期也差不多就是状态多了点&#xff0c;买入、保持卖出、当日卖出、以及冷冻期…...

内网环境下让容器上网,并制作一个httpd容器

1.下载基础镜像 上一次&#xff0c;我们通过正向互联网代理在内网环境中&#xff0c;搭建了一个docker环境&#xff0c;具体环境如下&#xff1a; 1) 内网docker服务器&#xff1a;192.168.123.1&#xff0c;操作系统为&#xff1a;redhat 7.9 2) 代理服务器(可通外网)&#…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...