如果串口已经打开,使用CreateFile()也一样会返回INVALID_HANDLE_VALUE。
要对已经打开,但是还没有获取到串口句柄的串口进行操作,用什么办法?
同样关注。
个人感觉,做一个全局变量,然后使用函数提取这个变量,应该是可以的
不是,我没有把意图说明白。
我想测试串口,把测试信息发送到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。
请教一下,如何处理这种情况呢?望指教
引用: 引用 6 楼 91program 的回复:
usb转串口成功了吗?
默认是不会占用串口的。
转是转成功了,因为可以从PC上看到多了一个COM口
PC端?
下面的代码也是在PC上运行吗?
HANDLE hPort = CreateFile(_T("COM12:"),GENERIC_READ | GENERIC_WRITE,0,NULL,0,OPEN_EXISTING,NULL);
如果我连接一个空闲的COM口,这段代码是没有问题的。
引用: 引用 8 楼 91program 的回复:
PC端?
下面的代码也是在PC上运行吗?
HANDLE hPort = CreateFile(_T("COM12:"),GENERIC_READ | GENERIC_WRITE,0,NULL,0,OPEN_EXISTING,NULL);
如果能获取到这个串口的句柄,那一切应该都迎刃而解了。。。。。。
串口是程序独占性的访问,如果有其他程序打开了该串口,你就不能够继续使用了,所以知道句柄意义不大。我估计你的问题是USB转串口的驱动安装不正确,或者你打开的串口号不正确。你可以按以下思路定位问题:
1、写个程序或者找个软件扫描一下所有串口的端口,看能否找到你的设备;
2、不行的话可先测试一下你这个USB转串口线是否正常工作,找个正常的串口设备连接上,让它不停发送数据,你在PC端用超级终端之类软件来测试是否能收到。
USB转串口线应该能正常工作,因为在程序中有printf打印一个字符串,使用PC端的串口查看软件能看到向这个字符串,也就是说USB转串口线是成功,并且是连通的。
也就是说PC端的串口查看工具可以正常打开该端口,而你的程序打开同一个端口却失败,是吗?
之前是对串口通信的机制不理解,重新阐述一下问题。
我用一条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(也就是我连接外设的串口)。
引用: 引用 10 楼 yongshi128 的回复:
引用 8 楼 91program 的回复:
PC端?
下面的代码也是在PC上运行吗?
HANDLE hPort = CreateFile(_T("COM12:"),GENERIC_READ | GENERIC_WRITE,0,NULL,0,OPEN_EXISTING,NULL);
如果能获取到这个串口的句柄,那一切应该都迎刃而解了。。。。。。
这行代码是不可能打开COM12的,打开10及其以上的COM的时候这样写是不行的,要加个什么什么东西,我忘了.....
这个不是关键所在。
我想知道的是,WM中的Serial_Modem对应的COM1能否通过我上述的连接方式和PC进行通信??
还有,上面所说的几个串口一样应用于哪方面的通信?
望指教。