【编程基础】Windows下如何玩转串口编程

问题:有朋友在群里问Windows下如何给单片机发送或者接收数据。

在windows下,各种外设都被看成文件,这个跟Linux下看成设备节点类似,所以串口当然是被看成是一个文件。既然被看成文件,所以打开和读写都跟文件类似。

打开串口跟打开文件一样,Win32下就是CreateFile函数,比如下面就采用同步模式打开一个COM1口: CreateFile(TEXT("COM1"), GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);

异步模式打开时,需要将倒数第二个参数设为FILE_FLAG_OVERLAPPED。

打开串口后,需要设置超时和串口参数,超时用SetCommTimeouts函数,设置波特率、数据位、校验位、停止位等使用SetCommState函数。

串口发送其实就是串口作为文件的写操作,API函数是WriteFile,比如下面的实例就向同步模式打开的串口发送buffer中的数据: WriteFile(hComm, buffer, dwSendLen, &dwActlen, NULL);

同步模式发送数据时,是阻塞式的,也就是没有发送完是不会返回来。要是异步模式发送,则调用后马上返回而不管是否发送完毕,发送的具体工作交给后台进行,当真正发送完毕后通过事件通知应用程序。

串口接收其实就是串口作为文件的读操作,API函数是ReadFile,下面就是同步模式下的将串口数据读到buffer中: ReadFile(hComm, buffer, dwReadLen, &dwActlen, NULL);

同步模式接收数据时,也是阻塞式的,在希望读取的字节数没有完成时是不会返回的。异步模式则马上返回,如果没有发送完毕,则交由后台发送。后台完成发送工作后用事件方式通知应用程序。

以上就是Windows下的串口发送和接收,具体API函数的详细用法,可以参考MSDN。只要好好阅读相关的每个函数,完成基本的串口通信就没有问题。

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-09-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏坚毅的PHP

cherryPy学习

url参数映射 (搜索词cherrypy add url parameter) class Root: @cherrypy.expose def check...

3756
来自专栏FreeBuf

使用Python检测并绕过Web应用程序防火墙

Web应用防火墙通常会被部署在Web客户端与Web服务器之间,以过滤来自服务器的恶意流量。而作为一名渗透测试人员,想要更好的突破目标系统,就必须要了解目标系统的...

3625
来自专栏数据之美

Eclipse 下找不到或无法加载主类的解决办法

有时候 Eclipse 会发神经,好端端的 project 就这么编译不了了,连 Hello World 都会报“找不到或无法加载主类(Exception in...

2055
来自专栏Linux驱动

第3阶段——内核启动分析之创建si工程和分析stext启动内核函数(4)

目标: (1)创建Source Insight 工程,方便后面分析如何启动内核的 (2)分析uboot传递参数,链接脚本如何进入stext的  (3) 分析st...

1696
来自专栏快乐八哥

Windows8异步编程的注意事项

Windows8项目中涉及到下载数据和上传数据。针对小的数据使用的是WinJS.xhr(),而针对大的文件,不方便使用post方式直接上传的文件都使用Backg...

16410
来自专栏快乐八哥

Windows8异步编程的注意事项

Windows8 App开发中涉及到下载数据和上传数据。针对小的数据使用的是WinJS.xhr(),而针对大的文件,不方便使用post方式直接上传的文件都使用B...

18810
来自专栏FreeBuf

Kali下常用安全工具中文参数说明(160个)

*本文原创作者:屌丝绅士,属Freebuf原创奖励计划,转载请注明来自FreeBuf 由于篇幅有限,只列举部分,ps:第一次发有什么不对的 还望各位大大指正 n...

2619
来自专栏salesforce零基础学习

salesforce 零基础学习(二十九)Record Types简单介绍

在项目中我们可能会遇见这种情况,不同的Profile拥有不同的页面,页面中的PickList标签可能显示不同的值。这个时候,使用Record Types可以很便...

1796
来自专栏有趣的django

26.Django模板语言和分页

继承 extends  子版只能继承一个父模板 1.父模板 master.html <!DOCTYPE html> <html lang="en"> <head...

2444
来自专栏Linux驱动

第3阶段——内核启动分析之创建si工程和分析stext启动内核函数(4)

目标: (1)创建Source Insight 工程,方便后面分析如何启动内核的 (2)分析uboot传递参数,链接脚本如何进入stext的  (3) 分析st...

1836

扫描关注云+社区