查看: 10383
回复: 12
【码农心得】打不开大于10序号的USB串口的解决方案

主题

回复
发表于2017-09-05 20:03:50 | 只看该作者
1# 电梯直达

现写现学~

今天碰到一个问题,跟大家分析一下心得~


使用WIN32 API 打开当COM号大于10的时候,会出现打开错误或失败,一般解决的办法是人工修改USB 串口

的com的名称让它的com号是单位数(如: COM1~COM9),但这样较麻烦。而且,客户的电脑,在远方,让客户自己修改也不现实吧?!


那咋办? 解决办法如下:

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

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

 CreateFile(
                        "\\\\.\\COM10",           // 定义串口名
                        fdwAccess,                 // 存取模式(读写)
                        0,                               // 共享模式:必须设置为0,表示设备独占使用
                        NULL,                       // 保密性
                        OPEN_EXISTING,    // 必须设置为OPEN_EXISTING
                        0,                              // 文件属性,如果是异步模式,可设置为
                       NULL                        // 模版,串口设备必须设置为NULL
             );




主题

回复
发表于2017-09-05 21:46:23   |  只看该作者
2#
好经验~ 

主题

回复
发表于2017-09-06 00:20:36   |  只看该作者
3#
This is a good experience. Do you have any other tutorial on using serial port with win32 API?

主题

回复
发表于2017-09-19 09:52:29   |  只看该作者
4#
发表于2017-09-06 00:20:36  3# Thisisagoodexperience.Doyouhaveanyothertutorialonusingserial...

最近很忙,刚到看到你的回复~


目前,我用的是这个类库(挺不错的)

CSerialPort v1.33


http://www.naughter.com/serialport.html


关于串口编程或控件、Class 类库(特别是MFC), 在知名网站: www.codeproject.com 也挺多的。



主题

回复
发表于2017-09-23 10:34:09   |  只看该作者
5#

>CSerialPort v1.33


Do you think it still can be compiled on VC++6?


主题

回复
发表于2017-09-23 15:37:44   |  只看该作者
6#
发表于2017-09-23 10:34:09  5# >CSerialPortv1.33DoyouthinkitstillcanbecompiledonVC++6?

可以,But....


v1.19 (24 June 2006)

CSerialException::GetErrorMessage now uses the strsafe functions. This does mean that the code now requires the Platform SDK if compiled using VC 6.

主题

回复
发表于2017-09-23 22:36:26   |  只看该作者
7#

>Platform SDK

what is it? Where can I get it?


主题

回复
发表于2017-09-24 01:39:18   |  只看该作者
8#

我就想知道WINDOWS 串口大到256 这种级别,无法再递增,如何重设置为个位数,重新开始。


比如批量生产  usb转串口这样的东西,每插一个新板,电脑识别一个号,很快就饱和。


主题

回复
发表于2017-09-28 10:54:40   |  只看该作者
9#
发表于2017-09-24 01:39:18  8# 我就想知道WINDOWS串口大到256这种级别,无法再递增,如何重设置为个位数,重新开始。比如批量生产usb转串口这样的...
写个软件就可以对COM编号进行复位。或者还有一个办法,就是用USB HOST 的单片机,直接对USB转串口进行测试,测试一个模块,单片机重新复位一次。

主题

回复
发表于2017-09-28 11:15:21   |  只看该作者
10#
发表于2017-09-23 22:36:26  7# >PlatformSDKwhatisit?WherecanIgetit?

我没有用VC6 ,如果你用VC6 ,只能咨询一下官方了:

Postal Address Naughter Software,
Clonganny, 
Ballygarrett, 
Gorey, 
Co. Wexford, 
Ireland
Email pjna@naughter.com
Hotmail pjnaughter@hotmail.com
Web http://www.naughter.com
Blog https://naughter.wordpress.com
Phone +353 53 9427960

另外的一个办法是: 如果你用FTDT的芯片,可以直接用FTDT官方出的DLL通信库,那个也挺好用的。




主题

回复
发表于2017-10-07 10:12:49   |  只看该作者
11#
发表于2017-09-23 22:36:26  7# >PlatformSDKwhatisit?WherecanIgetit?

If you are familar with FTDI or Silabs chips,  the following web-Linked will be a good start for you:


1. D2XX or D3XX Driver API

http://www.ftdichip.com/FTDrivers.htm


2. USBXpress SDK

https://www.silabs.com/products/development-tools/software/direct-access-drivers


主题

回复
发表于2021-09-16 10:50:13   |  只看该作者
12#

前辈你好,我想通过串口烧录MCU程序,这边是自己写的命令和解析的文件,然后按照官方手册发送命令到MCU,就是HEX文件的文件类型为05的该怎么处理,希望您能指点一下。

比如(:040000050800017D71


主题

回复
发表于2021-09-22 14:54:41   |  只看该作者
13#

设备路径说明符 \\.\和\\?\ 应该很早就有了:

https://docs.microsoft.com/zh-cn/dotnet/standard/io/file-path-formats


主题

回复
  • 温馨提示: 标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考: 社区发帖规则
  • 您当前输入了 0 个文字。还可以输入 8000 个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

禁言/删除

X
请选择禁言时长:
是否清除头像:
禁言/删除备注:
昵 称:
 
温馨提示:昵称只能设置一次,设置后无法修改。
只支持中文、英文和数字。

举报

X
请选择举报类型:
请输入详细内容:

顶部