OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5702|回复: 10

STM32 vcp例程 调试

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2016-11-3
在线时间
6 小时
发表于 2016-11-3 19:19:52 | 显示全部楼层 |阅读模式
2金钱
最近在调STM32的虚拟串口,参考了官网的例程USB-FSD下的virtual com port例程,
现在USB端口识别了,驱动安装成功,电脑上打开串口调试助手,发现串口:有时可以打开,有时不能打开。
比如用JLINK刚下好程序(已设置自动重启),串口就无法打开,必须要断电重启才行;
还有用jlink仿真器调试的时候,也就无法打开串口(这很麻烦啊,不能在线调试),请问这个是什么原因,是仿真器的兼容问题吗?
谢谢!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11477
金钱
11477
注册时间
2014-4-1
在线时间
1298 小时
发表于 2016-11-3 20:22:06 | 显示全部楼层

虚拟串口,归根结底还是USB,必须遵守USB协议。
USB协议规定,主机和从机之间有紧密的通讯行为,要求对方的回复时间在毫秒甚至更短,
用仿真器停顿的时候,这个时间关系就被破坏了,主机认为子机有问题而停止通讯。

所以必须全速运行。要在线调试,只能用设断点的方法,
然后断开USB,再全速运行。

回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2016-11-3
在线时间
6 小时
 楼主| 发表于 2016-11-4 09:30:02 | 显示全部楼层
xuande 发表于 2016-11-3 20:22
虚拟串口,归根结底还是USB,必须遵守USB协议。
USB协议规定,主机和从机之间有紧密的通讯行为,要求对 ...

你好,我懂你的意思,我没打断点,调试模式进入后,直接全速运行,这个时候,串口助手就打不开了。。
你觉得和仿真器有没有关系?
我参考了网友分享的VCP代码,感觉也没改什么底层,无非就是配置GPIO什么的,但是貌似他们的可以使用。。
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11477
金钱
11477
注册时间
2014-4-1
在线时间
1298 小时
发表于 2016-11-4 10:32:51 | 显示全部楼层
xiaomowx321 发表于 2016-11-4 09:30
你好,我懂你的意思,我没打断点,调试模式进入后,直接全速运行,这个时候,串口助手就打不开了。。
你 ...


我用F4,基本完全用官方库,也是下载后不插拔USB线、全速运行,好像没有问题。

是否你对上拉电阻的控制有问题?
或者上位机驱动有问题?

如果网友的程序可用,你可以把自己的程序移植过去。

回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2016-11-3
在线时间
6 小时
 楼主| 发表于 2016-11-4 10:58:49 | 显示全部楼层
xuande 发表于 2016-11-4 10:32
我用F4,基本完全用官方库,也是下载后不插拔USB线、全速运行,好像没有问题。

是否你对上拉电阻的 ...

我用的是FSD里面的virutual com port例程,不是CDC类和HID类什么的哦,
驱动嘛,下载的官方vcp驱动,
你也是基于这个例程改的吗?
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11477
金钱
11477
注册时间
2014-4-1
在线时间
1298 小时
发表于 2016-11-4 11:15:27 | 显示全部楼层
xiaomowx321 发表于 2016-11-4 10:58
我用的是FSD里面的virutual com port例程,不是CDC类和HID类什么的哦,
驱动嘛,下载的官方vcp驱动,
...


是。

等等,FSD是怎么回事?

回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2016-11-3
在线时间
6 小时
 楼主| 发表于 2016-11-4 11:20:35 | 显示全部楼层
xuande 发表于 2016-11-4 11:15
是。

等等,FSD是怎么回事?

QQ截图20161104111954.png
是这个里面的virtual com port例程基础上改的
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11477
金钱
11477
注册时间
2014-4-1
在线时间
1298 小时
发表于 2016-11-4 13:51:49 | 显示全部楼层
xiaomowx321 发表于 2016-11-4 11:20
是这个里面的virtual com port例程基础上改的


那差不多,除了型号F3以外,我也是用这样的库。
注意这是F3的库。


回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2016-11-3
在线时间
6 小时
 楼主| 发表于 2016-11-4 14:38:40 | 显示全部楼层
xuande 发表于 2016-11-4 13:51
那差不多,除了型号F3以外,我也是用这样的库。
注意这是F3的库。

这个知道的,我再看看吧
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2016-10-5
在线时间
14 小时
发表于 2016-11-4 15:20:16 | 显示全部楼层
要想不断电实现USB重连接,需要将 USB 的 IO 先拉低一段时间,然后再拉高(外部上拉电阻)。我的做法是:
    RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_OTG_FS,ENABLE);        // 失能 OTG 时钟以使 IO 可操作

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);        // 使能 GPIOA 时钟
    //GPIOA11,A12初始化设置
    GPIO_InitStructure.GPIO_Pin     = GPIO_Pin_11 | GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Mode    = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType   = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed   = GPIO_Speed_25MHz;
    GPIO_InitStructure.GPIO_PuPd    = GPIO_PuPd_UP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_ResetBits(GPIOA,GPIO_Pin_11 | GPIO_Pin_12);        //将 USB 口拉低

………………延时,然后

    // 使能 OTG 时钟以使 USB 可用
    RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_OTG_FS,DISABLE);

………………然后,USB 函数初始化。它会自己重置 IO。
这样,PC 就能重新识别到设备了。
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2016-11-3
在线时间
6 小时
 楼主| 发表于 2016-11-4 17:24:39 | 显示全部楼层
impeller 发表于 2016-11-4 15:20
要想不断电实现USB重连接,需要将 USB 的 IO 先拉低一段时间,然后再拉高(外部上拉电阻)。我的做法是:
...

这个我在其他帖子也看到了,我试试,谢了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-3-1 06:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表