程序调试时发现,使用CreateFile()打开COM4时正常,打开COM10时却总是失败。这两个端口均为虚拟COM口,通过蓝牙仿真串口完成数据收发,除了命名不同外,本质上并无任何不同。

而MSDN上对使用CreateFile()打开设备函数却失败返回并无详细解释,百思不得其解。上网百度一下找到了相关资料,原来是:

Win32 API函数CreateFile()除了可打开普通文件外,还可以打开设备,比如可用于打开串口,获得串口句柄。

使用CreateFile()函数打开串口时文件共享模式应设置为0(表示独占),创建参数设置为OPEN_EXISTING,模板必须设置为NULL。

如果为COM1至COM9,可使用“COM1”-“COM9”作为文件名传递给CreateFile()函数,函数可成功返回。但是,如果操作对象为COM10及以上的端口,以此方式命名文件名调用CreateFile()函数会返回INVALID_HANDLE_VALUE,表示端口无法打开。

产生这种奇怪现象的原因是:微软预定义的标准设备中含有“COM1”-“COM9”。所以,“COM1”-“COM9”作为文件名传递给函数时操作系统会自动地将之解析为相应的设备。但对于COM10及以上的串口,“COM10”之类的文件名系统只视之为一般意义上的文件,而非串行设备。

为了增加对COM10及以上串行端口的支持,微软规定,如果要访问这样的设备,应使用这样的文件名(以COM10为例):\\.COM10

所以,对于COM10及以上的串口,CreateFile()的调用样式应调整如下:

CreateFile(

"\\\\.\\COM10",           // 定义串口名

fdwAccess,                // 存取模式(读写)

0,                               // 共享模式:必须设置为0,表示设备独占使用

NULL,                        // 保密性

OPEN_EXISTING,      // 必须设置为OPEN_EXISTING

0,                               // 文件属性,如果是异步模式,可设置为

NULL                         // 模版,串口设备必须设置为NULL

);

需要注意的是:这套命名规范同样适用于COM1-COM9。

参考处:http://support.microsoft.com/?id=115831

另,MSCOMM串口控件无此问。估计是其底层程序注意到了此问题并妥善地解决了。

使用CreateFile函数打开COM10及以上串行口相关推荐

  1. uart串行口通信(一)

    前言 人类生存于世,少不了沟通.沟通使人类互相认知,传递信息,提升生活品质.但然单片机也需要,不然单单一个机器,无法构成一个系统,发挥更大的力量.只有单片机与外围设备传递信息,互相反馈才会有一个完美的 ...

  2. 串行口中断服务函数的触发条件-------TI/RI 触发

    串行口中断服务函数和其他中断本质上是一样的,达到特定的条件,向CPU申请中断,进入中断服务函数: 我特意在郭天祥老师的书上找到了一句话:当数据被写入SBUF寄存器后,单片机自动开始从起始位发送数据,发 ...

  3. 俩个PC机通过串行口互联,实现件的无差错传输。程序必须用中断方式来完成任务

      课程设计(论文)任务书 一.设计题目:1.题目名称      PC机通过串行口互联 2.题目来源               二.目的和意义 俩个PC机通过串行口互联,实现件的无差错传输.程序必须 ...

  4. 串行口发送子程序C语言,基于C语言的RS232串行接口通信实现

    摘要:串口通信是一种广泛使用且实用的通信方式,介绍RS232串行通信的联结方式,研究利用c语言编程实现RS232串行通信的过程.结合实际应用,在约定双方串行通信协议的基础上,运用C语言开发的串行通信软 ...

  5. 20.串行口通信原理及操作流程

    c 第六章:串行口通信原理及操作流程 6.1并行与串行基本通行方式 单片机通信是指单片机与计算机或单片机与单片机之间的信息交换,后者的通信通常用的较多. 通信有并行和串行龄种方式,在单片机系统以及现代 ...

  6. 快速复习51单片机的外部中断、计数/定时器中断和串行口中断,加代码实现

    目录 1.中断系统的概念 1.1中断的概念 1.2中断系统的概念 1.3中断系统的优点 1.4我们要说的三种中断源 2.外部中断 2.1 外部中断0 代码示范 2.2 外部中断 分析 3.计数/定时器 ...

  7. setserial - 取得/设置 Linux 串行口的信息

    总览 setserial [ -abqvVWZ] 设备 [ 命令参数一 [ 设备变元参数 ] ] ... setserial -g [-abGv ] 设备一 ... 描述 setserial 是一个用 ...

  8. 南京邮电大学微型计算机原理与接口技术:微机系统串行口的测试

    一.实验目的和要求 了解微机系统串行口RS-232C的内部结构.工作原理: 掌握Ins 8250的初始化编程方法,学会串行通信程序的设计. 二.实验内容 实验内容1:完成硬件测试环境,编写程序对微机系 ...

  9. 51汇编练习——串行口的传输

    编写一个发送程序:采用串口工作方式1将8051单片机P1口采集的8位数据实时串行传输.无需奇偶校验,采用中断方式.波特率为9600波特(晶振频率为11.0592MHz). ORG 0000H LJMP ...

最新文章

  1. QSignalMapper的使用
  2. LeetCode 300. 最长上升子序列(Longest Increasing Subsequence)
  3. linux大端小端命令,linux的大小端、网络字节序问题
  4. (计算机组成原理)第四章指令系统-第一节2:扩展操作码
  5. 损失函数——交叉熵损失函数
  6. PAT乙级(1020 月饼)
  7. python更新版本会丢失库吗_Python小技巧:如何批量更新已安装的库?
  8. 顶部吸附_吸附脱附催化燃烧的工作原理
  9. MFC 教程【10_内存分配方式和调试机制 】
  10. 拓端tecdat|R语言中基于混合数据抽样(MIDAS)回归的HAR-RV模型预测GDP增长
  11. 如何安全地终止线程interrupt()、isInterrupted()、interrupted()的区别与使用
  12. linux安全加固项目
  13. web漏洞扫描器-awvs
  14. Java 简单计算器
  15. 乳清白蛋白纳米粒修饰生物素
  16. Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificat
  17. python io多路复用_【python】-- IO多路复用(select、poll、epoll)介绍及实现
  18. 关于会员积分体系的产品设计
  19. Python爬虫-爬取常用IP代理
  20. 从一位老工程师的心里话开始谈起IT行业职

热门文章

  1. 李开复:不是言AI必称中美,而是欧洲太堂吉诃德
  2. Flowable V5.x迁移至Flowable V6时需要注意的事项
  3. 多线程:Vector是线程安全的吗
  4. Android --- 按钮控件设置与不设置背景都会有一个小小的灰色阴影怎么去掉?
  5. python怎么用pip_python怎么使用pip工具
  6. 某股份制商业银行数据中心灾备建设经验
  7. IDE之VS:Visual Studio2017版本安装图文教程之详细攻略
  8. 成功解决TypeError: sequence item 0: expected str instance, list found
  9. AI:2020年6月22日北京智源大会演讲分享之10:40-11:10Daniel教授《 可微分的加权有限状态机及其机器学习应用》、11:10何晓冬教授《启动“智源-京东”任务导向多模态对话大赛》
  10. CV之Hog+HamMingDistance:基于Hog提取和汉明距离对比的应用—图像相似度对比之for循环将多个成对图片依次对比并输出相似度