如何获取已经打开的串口句柄?

yydwhy   2009-8-17 21:43 楼主
    各位,如何获取已经打开的串口句柄?

    望执教!

回复评论 (20)

??CreateFile()返回的不就是句柄么?
点赞  2009-8-17 22:17
如果串口已经打开,使用CreateFile()也一样会返回INVALID_HANDLE_VALUE。

要对已经打开,但是还没有获取到串口句柄的串口进行操作,用什么办法?

同样关注。
点赞  2009-8-18 07:56
LZ不会是想在进程之间传递句柄吧?
点赞  2009-8-18 07:57
个人感觉,做一个全局变量,然后使用函数提取这个变量,应该是可以的
点赞  2009-8-18 07:58
不是,我没有把意图说明白。

我想测试串口,把测试信息发送到PC上

我使用usb转串口线,引出一个串口,usb转串口线一端连接pc的usb口,另一端连接mobile

但是当我用HANDLE hPort = CreateFile(_T("COM12:"),GENERIC_READ | GENERIC_WRITE,0,NULL,0,OPEN_EXISTING,NULL);

打开串口失败,返回INVALID_HANDLE_VALUE。

我想应该是usb转串口的过程,默认已经打开占用了串口,所以才返回INVALID_HANDLE_VALUE。

请教一下,如何处理这种情况呢?望指教
点赞  2009-8-18 12:05
usb转串口成功了吗?
默认是不会占用串口的。
点赞  2009-8-18 13:38
引用: 引用 6 楼 91program 的回复:
usb转串口成功了吗?
默认是不会占用串口的。

转是转成功了,因为可以从PC上看到多了一个COM口
点赞  2009-8-18 13:39
PC端?
下面的代码也是在PC上运行吗?
HANDLE hPort = CreateFile(_T("COM12:"),GENERIC_READ | GENERIC_WRITE,0,NULL,0,OPEN_EXISTING,NULL);
点赞  2009-8-18 13:45
如果我连接一个空闲的COM口,这段代码是没有问题的。
点赞  2009-8-18 13:47
引用: 引用 8 楼 91program 的回复:
PC端?
下面的代码也是在PC上运行吗?
HANDLE hPort = CreateFile(_T("COM12:"),GENERIC_READ | GENERIC_WRITE,0,NULL,0,OPEN_EXISTING,NULL);

如果能获取到这个串口的句柄,那一切应该都迎刃而解了。。。。。。
点赞  2009-8-18 13:50
顶帖!

继续望指教。
点赞  2009-8-18 15:35
串口是程序独占性的访问,如果有其他程序打开了该串口,你就不能够继续使用了,所以知道句柄意义不大。我估计你的问题是USB转串口的驱动安装不正确,或者你打开的串口号不正确。你可以按以下思路定位问题:
1、写个程序或者找个软件扫描一下所有串口的端口,看能否找到你的设备;
2、不行的话可先测试一下你这个USB转串口线是否正常工作,找个正常的串口设备连接上,让它不停发送数据,你在PC端用超级终端之类软件来测试是否能收到。
点赞  2009-8-18 16:00
USB转串口线应该能正常工作,因为在程序中有printf打印一个字符串,使用PC端的串口查看软件能看到向这个字符串,也就是说USB转串口线是成功,并且是连通的。
点赞  2009-8-18 19:14
也就是说PC端的串口查看工具可以正常打开该端口,而你的程序打开同一个端口却失败,是吗?
点赞  2009-8-19 11:17
之前是对串口通信的机制不理解,重新阐述一下问题。
我用一条usb转串口的线,把PC的usb口引出一个串口,然后和mobile的串口线相接,在mobile端向与mobile外设连接的串口发送数据,然后希望在PC端能显示出发送的数据。CreateFile()连接成功,发送数据WriteFile()也成功了,但是在PC端的串口监控程序不能检测到我写入的数据,单步调试时读到的是一大串乱码。
后面我下载了一个mobile端的用来操作串口的应用程序,同样向相同的串口发送数据,应用程序的数据接收端也只显示一大堆乱码。
我手机OEM就说有四个串口分别COM1,2,3,6,分别对应的UART口是Serial_Modem,Serial_BT(蓝牙),Serial_GPS ,Serial_AGPS。我打开的是COM6(也就是我连接外设的串口)。
点赞  2009-8-19 12:24
现在不知道该怎样做了?

望各位指教。
点赞  2009-8-19 12:28
引用: 引用 10 楼 yongshi128 的回复:
引用 8 楼 91program 的回复:
PC端?
下面的代码也是在PC上运行吗?
HANDLE hPort = CreateFile(_T("COM12:"),GENERIC_READ | GENERIC_WRITE,0,NULL,0,OPEN_EXISTING,NULL);


如果能获取到这个串口的句柄,那一切应该都迎刃而解了。。。。。。

这行代码是不可能打开COM12的,打开10及其以上的COM的时候这样写是不行的,要加个什么什么东西,我忘了.....
点赞  2009-8-19 16:45
乱码问题。。两边的流控设没有?
点赞  2009-8-19 16:52
这个不是关键所在。
我想知道的是,WM中的Serial_Modem对应的COM1能否通过我上述的连接方式和PC进行通信??
还有,上面所说的几个串口一样应用于哪方面的通信?
望指教。
点赞  2009-8-19 16:54
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复