打印
[STM32F1]

请教STM32 usb虚拟串口一些问题

[复制链接]
5387|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
supper大毛|  楼主 | 2015-3-10 10:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、STM32F103VET6,测试usb能正常枚举、通讯。但是在正常枚举后,使用串口工具通讯测试正常,此时串口工具处于“打开”状态,此时拔掉usb,PC检测不到usb,再重新插上usb,PC能正常识别到设备“STM32 Virtual COM Port”,因此时串口工具仍处于“打开”状态,但无法通讯,把串口工具“关闭串口”再“打开串口”,提示“无法打开串口”,但另外测试:先把串口工具关闭,在重新插拔usb,能正常枚举、通讯。开始怀疑是串口工具的问题,但是更换了4款串口工具,均是此情况,请教是什么原因,有什么解决的方法吗?

2、使用usb做IAP时在跳转时会重新枚举一次,请教有什么方法可以在设备上电时只枚举一次??
沙发
icecut| | 2015-3-10 10:32 | 只看该作者
两个问题都无解.
1. windows的问题.
2. usb就是这么设计的.如果你想改,就自己重做usb升级

使用特权

评论回复
板凳
huangqi412| | 2015-3-10 12:51 | 只看该作者
icecut 发表于 2015-3-10 10:32
两个问题都无解.
1. windows的问题.
2. usb就是这么设计的.如果你想改,就自己重做usb升级 ...

应该都是有解的吧。
1   PC机串口软件要感知USB插拔事件,在此基础上做完善处理,具体繁琐的流程是细节问题, 原则上没有任何疑问。
2   IAP本质上只是 通信+擦写FLASH+绝对地址跳转 的组合。 并没有说非要RESET或者神马的, 以上三个组成没有任何一个会搞死已经枚举成功的USB模块,SO,原则上USB模块在通信+擦鞋FLASH+跳转后还能用。

使用特权

评论回复
地板
huangqi412| | 2015-3-10 12:53 | 只看该作者
普遍意义上应该是这样,具体到特定应用不一定可行,也不一定非要这么干。  

使用特权

评论回复
5
icecut| | 2015-3-10 13:23 | 只看该作者
huangqi412 发表于 2015-3-10 12:51
应该都是有解的吧。
1   PC机串口软件要感知USB插拔事件,在此基础上做完善处理,具体繁琐的流程是细节问 ...

1.串口软件怎么知道是usb实践呢.典型的乱要求.串口就是串口.这是win系统没做好.
2.usb dfu协议你看看,官方标准协议,就是这个流程.你改了就不再是usb dfu标准协议了.

使用特权

评论回复
6
huangqi412| | 2015-3-10 14:24 | 只看该作者
icecut 发表于 2015-3-10 13:23
1.串口软件怎么知道是usb实践呢.典型的乱要求.串口就是串口.这是win系统没做好.
2.usb dfu协议你看看,官 ...

1 楼主都已经讲了是插拔USB ,  限定了USB转串口

2 楼主只说USB做IAP,没说是DFU或者什么。

使用特权

评论回复
7
huangqi412| | 2015-3-10 14:31 | 只看该作者
楼主说的是现成串口助手没法重新连接,楼主的单片机板子显然做了最终不是给串口助手用的,而是给自己的上位机用的,自己上位机显然只专配自己板子用的,不会去兼容台式机原生串口,不止滤掉COM1,COM2,一般还会滤掉自己设备的串口名以外的所有其他串口,比如STM32做的名字叫STM32  VCOM,  就会滤掉FT232,CH341之类的串口。

使用特权

评论回复
8
lxyppc| | 2015-3-10 14:50 | 只看该作者
1. 串口软件的问题,换一个能感知串口热插拔的
2. 不用枚举,只要保证跳转前后的端点配置一致,数据处理方式一致

使用特权

评论回复
评论
huangqi412 2015-3-10 15:19 回复TA
这次没被你抢先了 O(∩_∩)O~ 
9
icecut| | 2015-3-10 15:07 | 只看该作者
本帖最后由 icecut 于 2015-3-10 15:09 编辑
huangqi412 发表于 2015-3-10 14:24
1 楼主都已经讲了是插拔USB ,  限定了USB转串口

2 楼主只说USB做IAP,没说是DFU或者什么。 ...

1.我说的是串口助手解决不了.所以无解. 但是有人说换串口助手,这个的确有能支持的.
2. usb iap就是基于dfu做的.因为lz不懂,所以描述不确切. iap不是国人山寨的,什么方法都用,老外喜欢用标准的.

使用特权

评论回复
10
huangqi412| | 2015-3-10 15:18 | 只看该作者
icecut 发表于 2015-3-10 15:07
1.我说的是串口助手解决不了.所以无解. 但是有人说换串口助手,这个的确有能支持的.
2. usb iap就是基于dfu ...

USB IAP  跟DFU不是一码事吧,没听说DFU是一种标准,各家芯片IAP都大不一样,同一家不同系列芯片IAP通信协议/IAP电脑软件都不一定相同。

使用特权

评论回复
11
foxglove| | 2015-3-10 15:41 | 只看该作者
STM32 usb虚拟串口

使用特权

评论回复
12
icecut| | 2015-3-10 17:39 | 只看该作者
huangqi412 发表于 2015-3-10 15:18
USB IAP  跟DFU不是一码事吧,没听说DFU是一种标准,各家芯片IAP都大不一样,同一家不同系列芯片IAP通信 ...

你说的很对iap实现方案很多.但是坑楼主的就是usb dfu....

使用特权

评论回复
13
gowow| | 2015-3-10 20:21 | 只看该作者
强词夺理。。。。
按一般的思路分离开发IAP和APP,USB当然会重新连接。无论怎么做,都会断。
不会重新连接,那就是保持IAP和APP的USB处理一致。
这和DFU有屁关系。

使用特权

评论回复
14
su_tech| | 2016-2-27 15:46 | 只看该作者
这个贴很有意思  USB 经过了IAP之后仍需要保持原有的枚举内容不变,连接状态不变. 这个其实不难解决, IAP程序和APP程序用同一个RAM地址存放USB当前状态. IAP和APP程序使用同一个配置和端点. 保证了以上两者后程序从IAP跳转至APP就能保证APP接下IAP对USB的接力棒.风险是在跳转过程中发生了多余的通信将造成两者对USB的接力失败

使用特权

评论回复
15
kitty1110| | 2016-4-28 14:05 | 只看该作者
su_tech 发表于 2016-2-27 15:46
这个贴很有意思  USB 经过了IAP之后仍需要保持原有的枚举内容不变,连接状态不变. 这个其实不难解决, IAP程 ...

也遇到了同样的问题。
目前程序有bootloader和APP 2个程序,bootloader中有IAP升级后跳转到APP。现在情况如下:
1、如果bootloader和APP中都有对USB初始化的操作,那IAP升级跳转到APP之后,需要重新插拔USB才能与PC正常通讯。(正常操作需要不能插拔USB)
2、如果只是在bootloader中对USB初始化,那IAP升级跳转到APP后,PC可发数据,但是芯片未收到数据。跟踪进去后发现是bootloader中USB所以的RAM和APP中的RAM地址不同。

如果想bootloader程序和APP程序的存放USB状态的数据使用同一块RAM,该怎么设置呢?
如果不设置RAM,那么怎样才能实现程序跳转之后,USB不需要重新插拔也可与PC正常通讯呢?

使用特权

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

本版积分规则

1

主题

1

帖子

0

粉丝