打印
[应用相关]

stm32虚拟串口与真实硬件串口的区别

[复制链接]
10970|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yang4469|  楼主 | 2014-6-20 12:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用官网的库例程编了个虚拟串口+HID,分别用F1、F3和F4的板子都实现了,但是发现一个问题,之前调试的时候也有注意到,但没在意:
   1.连接后,成功驱动,PC端串口助手打开对应的串口号,和设备通讯无误。但是如果一旦设备出问题,比如进入了死循环,如果此时PC端的串口助手点击关闭串口,串口助手就会卡死,必须重启下位机或者拔掉USB。
   2.串口助手打开对应的串口号,拔掉USB,然后再连上,无法和硬件串口一样能继续正常通信,中途串口助手不点击关闭串口。
   3.串口助手关闭串口后,必须有一次释放串口的过程,比如重启下位机,插拔USB,这样串口助手才能再次打开原来的串口,这也和硬件串口不同

对于以上3点疑问,我想请教,是下位机的程序处理问题,还是上位机的问题?
如果是上位机的驱动问题?还是上位机的串口助手问题?
下位机的程序是用的官网的库,驱动是在原有驱动文件里面加了一个MI_00(复合IAD设备),串口助手试了好几个,也自己用QT编了一个,都一样



沙发
wyde518| | 2014-6-20 14:24 | 只看该作者
CDC好像会出现你说的问题,我同事调的时候发现这种情况,怎么解决有待研究

使用特权

评论回复
板凳
yang4469|  楼主 | 2014-6-20 15:51 | 只看该作者
@香水城 香主,这个问题,请教一下,烦请指教一二

使用特权

评论回复
地板
香水城| | 2014-6-20 16:41 | 只看该作者
LZ描述的三个现象,对于单一的虚拟串口(不是LZ所用的复合设备)仍存在么?

1. 设备(MCU端)进入死循环,但是对上位机的通信响应,ST的例程都是基于中断来驱动的。除非这个死循环是在某个比USB中断优先级更高的中断里,否则设备端应该依然可以响应USB通信。上位机串口程序卡死。。。没有做过PC端程序和驱动的开发,不太清楚原因。但是如果使用官网上的虚拟串口例程搭配某个串口上位机能够重现这个现象,则可以用USB分析仪抓抓此时此刻USB总线上发生了神马,从而来确定是PC端,还是MCU端的问题。

2. 这个问题也可以功过USB分析仪来查看。比如开启串口程序后,连上USB线缆后,然后选择某端口点击打开的操作,拔下线缆,再连上。各个阶段总线上都是什么情况。之前没有注意过,下周有时间来看看。

3. 同上。

使用特权

评论回复
5
想做大牛的小马| | 2014-6-20 17:00 | 只看该作者
串口助手会卡死?。。。像是pc端的问题哦,这个时候看看device manager里面还有木有st的虚拟串口设备了、。?~

使用特权

评论回复
6
yang4469|  楼主 | 2014-6-20 17:37 | 只看该作者
香水城 发表于 2014-6-20 16:41
LZ描述的三个现象,对于单一的虚拟串口(不是LZ所用的复合设备)仍存在么?

1. 设备(MCU端)进入死循环, ...

单一的VCP针对问题2、3已测,情况和复合设备一样,也都是用的官网的东西

开启串口程序,打开串口后,拔掉USB,在连上,,串口程序此时找不到对应的串口。但是设备管理器里面是可以看到虚拟串口已经连上了,也能看到串口号。
必须在重新插拔usb才能找到串口号

使用特权

评论回复
7
yang4469|  楼主 | 2014-6-20 17:40 | 只看该作者
想做大牛的小马 发表于 2014-6-20 17:00
串口助手会卡死?。。。像是pc端的问题哦,这个时候看看device manager里面还有木有st的虚拟串 ...

可以看到,怀疑是PC端问题,但具体是串口程序问题还是驱动问题不确定。
还有,cp2102实质上也是一个虚拟串口,但是它就不会出现我提到的问题,这又让我怀疑是不是下位机函数处理部分哪里考虑的不周全了。

使用特权

评论回复
8
香水城| | 2014-6-20 17:44 | 只看该作者
yang4469 发表于 2014-6-20 17:37
单一的VCP针对问题2、3已测,情况和复合设备一样,也都是用的官网的东西

开启串口程序,打开串口后,拔 ...

我下周找时间抓抓总线,到时候贴出来给你。

使用特权

评论回复
9
yang4469|  楼主 | 2014-6-20 17:52 | 只看该作者
通过打开多个串口程序测试,发现当一个串口号被占用时,其他串口程序也是能找到改串口号的,只是被占用了,无法打开而已,而不是找不到。
由此是否可以推断,当串口程序打开虚拟串口号,拔掉虚拟串口后,就算此时关闭串口,实际上并没有释放掉虚拟串口,虽然windows硬件里面能找到该虚拟串口,单应用层找不到

使用特权

评论回复
10
yang4469|  楼主 | 2014-6-20 17:52 | 只看该作者
香水城 发表于 2014-6-20 17:44
我下周找时间抓抓总线,到时候贴出来给你。

恩,好的,谢谢

使用特权

评论回复
11
mcuisp| | 2014-6-20 23:06 | 只看该作者
串口终端卡死的问题,可以试试我的eagleComm后再下结论:)

使用特权

评论回复
12
yang4469|  楼主 | 2014-6-21 11:11 | 只看该作者
mcuisp 发表于 2014-6-20 23:06
串口终端卡死的问题,可以试试我的eagleComm后再下结论

刚去你的主页下载来测试了下,不会卡死;
通过bushound可以看到你是通过不断检测设备是否连接上,
一旦设备连接有问题,马上就会断开连接,通过软件处理的机制解决了问题

但是没有从本质上解决问题,我看了下cp2102的资料,发现cp210x也是虚拟串口,但是它就可以做到设备断开后,软件不需要断开,设备再次连接上后然后能继续通信,做到了即插即用

使用特权

评论回复
13
mcuisp| | 2014-6-21 13:28 | 只看该作者
cp2102硬件上应该是一样的,可能它在驱动层做了类似我的软件的工作而已。

使用特权

评论回复
14
pattywu| | 2014-6-21 14:14 | 只看该作者
这windows的问题,与下位机关系不大。
毕竟虚拟串口不是真正的串口。

如果是自己写上位机程序,就去查一下windows的即插即用设备的插入与拨出是如何处理的(有对应消息)。

使用特权

评论回复
15
yang4469|  楼主 | 2014-6-27 18:32 | 只看该作者
总结一下:
问题的原因:下位机程序没有问题,问题出在上位机驱动,以及上位机软件(串口助手)
解决方法:采用libusb实现驱动,编写自己的上位机,对出现的问题进行相应的处理。同时由于不再是虚拟串口,下位机根据上位机编写的传输机制对应改动。

使用特权

评论回复
16
340065034| | 2015-11-21 10:54 | 只看该作者
求代码····参考参考···
340065034@qq.com
谢谢

使用特权

评论回复
17
大豆子| | 2017-10-13 19:55 | 只看该作者
能求参考嘛,f4,,楼主大大

使用特权

评论回复
18
大豆子| | 2017-10-13 19:56 | 只看该作者
876431463@qq.com

使用特权

评论回复
19
zhengyuxin119| | 2018-6-5 10:34 | 只看该作者
求资料 谢谢 1090543850@qq.com

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

267

帖子

0

粉丝