14.2.4 Win32 API串口通信编程的一般流程

2024-04-30 03:38

本文主要是介绍14.2.4 Win32 API串口通信编程的一般流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.打开串口

当程序初始化时,用户需要打开串口并创建与该串口相关联的文件。代码如下:

01  HANDLE hModem;     //定义串口句柄
02  hModem=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,0,

03  OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);  //关联串口并返回其句柄

%注意:用户在使用函数CreateFile()创建与串口相关联的文件时,必须将该文件的相关属性设置为FILE_FLAG_OVERLAPPED。否则,用户所创建的文件将不能实现异步操作。

2.设置串口参数

用户可以先调用函数GetCommState()获取系统当前对串口的设置,对结构体DCB进行修改,然后调用函数SetCommState()设置串口的参数。代码如下:

01  DCB dcb;

02  GetCommState(handleFile,&dcb);

03  dcb.BaudRate = 9600;

04  dcb.ByteSize = 8;

05  dcb.fParity = FALSE;

06  dcb.StopBits = ONESTOPBIT;

07  BOOL isTrue;

08  isTrue = SetCommState(handleFile,&dcb);

09  if(isTrue == FALSE)

10  {

11  MessageBox("串口参数设置失败");

12  return FALSE;

13  }

3.设置操作超时时间间隔

用户设置完串口的相关参数后,应该对串口操作的时间间隔进行设置。这样,当串口操作的时间间隔超出用户所设置的时间时,操作函数将被强制返回,避免程序假死。其代码如下:

01  COMMTIMEOUTS con;  //定义结构体变量

02  con.ReadIntervalTimeout=1000;  //设置串口数据读取的超时时间

03  BOOL istrue;  //定义布尔变量

04  istrue= SetCommTimeouts(hModem, &con);  //调用函数进行参数设置

05  if(istrue)  //判断串口参数是否设置成功

06  {

07  MessageBox("超时时间设置成功!");//若参数设置成功,则提示用户成功

08  }

09  else

10  {

11  MessageBox("超时时间设置失败!请重试");//若参数设置失败,则提示用户重试

12  }

在程序中,用户主要是依靠结构体COMMTIMEOUTS中的成员变量ReadIntervalTimeout对串口操作的超时时间间隔进行设置的。

4.设置串口缓冲区

现在,用户可以调用函数对串口的数据缓冲区进行设置,实现其功能的API函数是SetupComm()。代码如下:

SetupComm(hModem,1024,512);  //设置各数据缓冲区的大小

当用户在程序退出或者其他原因,不再需要使用串口缓冲区时,应该将其中的内容进行清除操作并析构该缓冲区。否则,当下次再使用时,程序将发生错误。代码如下:

01  BOOL istrue;  //定义布尔变量

02  istrue=PurgeComm(hModem, PURGE_TXABORT| PURGE_RXABORT|

03  PURGE_TXCLEAR|PURGE_RXCLEAR);//调用函数对缓冲区内容进行清除

04  if(istrue)  //判断清除是否成功

05  {

06  MessageBox("缓冲区数据清除成功!");  //若参数设置成功,则提示用户成功

07  }

08  else

09  {

10  MessageBox("缓冲区数据清除失败!请重试");//若参数设置失败,则提示用户重试

11  }

5.读写串口

通过以上几个步骤,关于串口的相关参数设置以及串口事件指定等操作已经基本完成。那么读者便可以用ReadFile()WriteFile()函数对串口进行读写操作了。

代码下载

这篇关于14.2.4 Win32 API串口通信编程的一般流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/947824

相关文章

基于C#实现MQTT通信实战

《基于C#实现MQTT通信实战》MQTT消息队列遥测传输,在物联网领域应用的很广泛,它是基于Publish/Subscribe模式,具有简单易用,支持QoS,传输效率高的特点,下面我们就来看看C#实现... 目录1、连接主机2、订阅消息3、发布消息MQTT(Message Queueing Telemetr

python通过curl实现访问deepseek的API

《python通过curl实现访问deepseek的API》这篇文章主要为大家详细介绍了python如何通过curl实现访问deepseek的API,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... API申请和充值下面是deepeek的API网站https://platform.deepsee

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

一文详解如何在Vue3中封装API请求

《一文详解如何在Vue3中封装API请求》在现代前端开发中,API请求是不可避免的一部分,尤其是与后端交互时,下面我们来看看如何在Vue3项目中封装API请求,让你在实现功能时更加高效吧... 目录为什么要封装API请求1. vue 3项目结构2. 安装axIOS3. 创建API封装模块4. 封装API请求

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll