打印

USB虚拟串口的怪问题,用的是demo,版主能否指点一下?

[复制链接]
5117|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
root_007|  楼主 | 2012-3-2 16:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 香水城 于 2012-3-2 17:00 编辑

芯片是stm32f103c8,用了好几个版本的demo,都存在这样的问题,描述如下:

Demo中用的是com1,我改为com2,其它都没动。com2接一modem,只接rx,tx。

情况一、通过modem传数据,50K左右,上位机通过at命令控制modem接收数据,接收完成就关闭vcp,过一两秒再打开继续上述过程,工作长则三小时,短则几十分钟后,上位机就不能打开VCP,提示“连到系统上的设备没有发挥作用”。

情况二、不运行上位机,不停拨号到modem,相当于modem不停送RING给芯片的usart2口,几分钟到几十分钟后,再打开上位机,也提示“连到系统上的设备没有发挥作用”。

根据一个多星期的查找,发现出现这个问题是由于 USB_LP_CAN1_RX0_IRQHandler这个中断处理过程不再被调用,而同时的USART2_IRQHandler中断处理一直在正常运行。

本想补救一下,在主循环中加了检测,只要USB_LP_CAN1_RX0_IRQHandler不被调用超过3ms,就在主循环中直接调用usb_istr(),并没有用。

请问版主,这个情况如何处理?

----补充-----
在出现“连到系统上的设备没有发挥作用”后,PC的设备管理器中“禁用”再“启用”相应的虚拟串口后,上位机又能正常打开VCP。

沙发
香水城| | 2012-3-2 17:00 | 只看该作者
请把modem去掉,直接用一个RS232电平转换芯片,把MCU与PC相连,看看还有同样现象吗?

使用特权

评论回复
板凳
香水城| | 2012-3-2 17:01 | 只看该作者
你把字搞得太大了,看得头晕,我帮你改小了。

使用特权

评论回复
地板
root_007|  楼主 | 2012-3-2 17:07 | 只看该作者
请把modem去掉,直接用一个RS232电平转换芯片,把MCU与PC相连,看看还有同样现象吗?
香水城 发表于 2012-3-2 17:00


modem芯片与stm32芯片是设计在一块板上的,现在无法加电平转换芯片。modem与stm32芯片的rx与tx间加有1K电阻。

不过modem芯片rx/tx电平应该不会影响stm32的usb部分吧?

使用特权

评论回复
5
root_007|  楼主 | 2012-3-2 17:09 | 只看该作者
PC通过VCP控制modem收发数据。

使用特权

评论回复
6
香水城| | 2012-3-2 17:12 | 只看该作者
我怀疑你没有处理好modem的事件,如果你不能把modem隔离开,我也很难说哪里有问题。

使用特权

评论回复
7
root_007|  楼主 | 2012-3-2 17:37 | 只看该作者
不知道版主说的modem事件是指什么?能否指出个大概的查找方向?
可能我没说清楚,modem输出的也是usart电平,不是rs232电平,modem与stm32芯片都是3.3V供电,应该不存在电平匹配的问题,中间电阻也换成过100欧的,无效,一样的问题。

使用特权

评论回复
8
香水城| | 2012-3-2 17:44 | 只看该作者
USB虚拟串口的Demo既没有at命令,也没有RING处理,我怎么能知道你看到的问题是来自Demo代码本身,还是来自你的modem部分的处理呢?

使用特权

评论回复
9
root_007|  楼主 | 2012-3-3 10:59 | 只看该作者
本帖最后由 root_007 于 2012-3-3 11:13 编辑
USB虚拟串口的Demo既没有at命令,也没有RING处理,我怎么能知道你看到的问题是来自Demo代码本身,还是来自你的modem部分的处理呢?
香水城 发表于 2012-3-2 17:44


看来还是我没有描述清楚,把问题简单化一下,就是:

stm32f103c8跑VCP,modem每隔四五秒输出 "RING<cr>" 字符给USART2,PC没有打开虚拟串口,上位机也没有运行,经过几分钟到十几分钟,上位机就无法打开虚拟串口了,提示就是“设备没有发挥作用”,代码中表现为 USB_LP_CAN1_RX0_IRQHandler 这个中断过程没有发生,但USART接收中断还是正常的。

这问题搞的头大,如果如版主所说,是因为modem芯片的电平问题,照我经验,应该只会影响usart数据准确性,不应该影响到usb的中断才对。



使用特权

评论回复
10
香水城| | 2012-3-4 12:10 | 只看该作者
我的理解是STM32的USB虚拟串口是处于你的modem和PC之间的桥梁,既然是桥梁,就是modem发什么,STM32就转发个PC;同样,PC发什么,STM32就转发给modem;在你的系统中做到这一点了嘛?比如modem发送"RING<cr>",这个字符串到达PC了嘛?PC怎么处理的?PC返回了什么?等等等等

使用特权

评论回复
11
Simon21ic| | 2012-3-4 18:07 | 只看该作者
本帖最后由 Simon21ic 于 2012-3-4 18:13 编辑

1. 使用调试方式运行程序,等到出现这个问题或,暂停,看一下USB寄存器
CDC的“设备没有发挥作用”,很可能是USB挂了
2. 找一个BusHound,看一下USB数据流
3. 找一个硬件USB分析仪,看一下出问题后USB和串口的数据流

使用特权

评论回复
12
root_007|  楼主 | 2012-3-6 13:57 | 只看该作者
本帖最后由 root_007 于 2012-3-6 14:01 编辑
我的理解是STM32的USB虚拟串口是处于你的modem和PC之间的桥梁,既然是桥梁,就是modem发什么,STM32就转发个PC;同样,PC发什么,STM32就转发给modem;在你的系统中做到这一点了嘛?比如modem发送"RING",这个字符串 ...
香水城 发表于 2012-3-4 12:10


又焊了一块板,板上只有stm32芯片,modem芯片之类的都空着,终于找到原因了,最终确定是电话线干扰导致无法进入usb中断,电话线随便放在pcb旁边,不需要接pcb,也不需要接电话机,离芯片有几cm距离,几次振铃后就无法进入usb中断,然后上位机就再也打不开虚拟串口了。
同一PCB,灌了HID的demo,受干扰后也会出现不进能中断的情况,但过一到两秒就能自行恢复,上位机还是能正常打开HID设备。

放狗后搜到一些类似情况,都没有解决,是否可以认为固件库中,vcp的错误处理还需要改进?

usb接口已做了一定的抗干扰措施,usb 5v出来后接100uh电感100uf电容滤波,3.3稳压后再接10uf+0.1uf,stm32几个Vdd都接了0.1uf,usb插座紧贴着stm32,引线距离不超过2cm.

使用特权

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

本版积分规则

3

主题

20

帖子

0

粉丝