打印
[应用相关]

STM32 USBD VBUS PA9 as GPIO

[复制链接]
979|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
前言
某客户准备用 STM32F205VCT6 做 USB FS Device 设备时, 配置 PA9 作为普通通用的 GPIO 口(外部上拉电阻 10K 到电压
3.3V, NO PU/PD), 在项目测试的时候发现,该引脚上的电压只有 2V。  

使用特权

评论回复
沙发
我只会加减乘除|  楼主 | 2021-11-10 13:59 | 只看该作者
一、 现象的复现
硬件: Nucleo-F207ZG board, 利用 CubeMx 生成代码出现同样的问题:  


对于硬件, 客户的示意图如下:


所以参考该 nucleo 的原理图, 修改, 移除掉 R35 电阻,自己添加一个色环电阻至 3.3V ;


使用特权

评论回复
板凳
我只会加减乘除|  楼主 | 2021-11-10 14:00 | 只看该作者
1.1 PA9 为通用输出 GPIO, 未使用 USB FS 模块
配置 PA9 为通用 GPIO 输出引脚 Open Drain 模式, 没有其他的 MCU 外设 IP 被使用, PA9 被 10Kohm 的色环上拉电阻拉到
Vdd 电压 3V3, 利用示波器测试, PA9 为 3V3 输出;

使用特权

评论回复
地板
我只会加减乘除|  楼主 | 2021-11-10 14:05 | 只看该作者
1.2 PA9 为输出 GPIO,开漏模式, 使用 USB FS 模块
使用该 MCU 的 USB FS 设备 IP, 并且配置 PA9 为输出, Open Drain mode 模式, PA9 被 10Kohm 的色环上拉电阻拉到 Vdd
电压 3V3。
测试发现,如果配置:
如果 OTG_FS_GCCFG(offset_0x038) = 0xXX2DXXXX, 那么 PA9 只有 2V 输出;
如果 OTG_FS_GCCFG(offset_0x038) = 0xXX25XXXX,那么 PA9 会有 3V3 输出;
客户的问题被发现。

使用特权

评论回复
5
我只会加减乘除|  楼主 | 2021-11-10 14:06 | 只看该作者
1.3 PA9 为输出 GPIO,推挽模式, 使用 USB FS 模块
使用该 MCU 的 USB FS 设备 IP,并且配置 PA9 为输出, push-pull 推挽模式, PA9 被 10Kohm 的色环上拉电阻拉到 Vdd 电
压 3V3。 测试发现:只需要设置 NOVBUSSENS setting(bit21)为 1,那么 PA9 就会被输出为 3V3, 而不论
OTG_FS_GCCFG(offset_0x038)寄存器的内容是 0xXX25XXXX 还是 0xXX2DXXXX;

使用特权

评论回复
6
我只会加减乘除|  楼主 | 2021-11-10 14:09 | 只看该作者
1.4 PA9 为输入 GPIO, NO PU/PD,未使用 USB FS 模块
配置 MCU 的 PA9 为通用的 GPIO 引脚,输入模式, no PU/PD, 没有使用 MCU 的其他外设 IP, PA9 被 10Kohm 的色环上拉
电阻拉到 Vdd 电压 3V3。 测试发现 PA9 为 3V3 输入。

使用特权

评论回复
7
我只会加减乘除|  楼主 | 2021-11-10 14:09 | 只看该作者
1. 5 PA9 为输入 GPIO, NO PU/PD, 使用 USB FS 模块
配置 MCU 的 PA9 为通用的 GPIO 引脚,输入模式, no PU/PD, 使用了 MCU 的 USBD FS 外设 IP, PA9 被 10Kohm 的色环
上拉电阻拉到 Vdd 电压 3V3。 测试发现:
如果 OTG_FS_GCCFG(offset_0x038) = 0xXX2DXXXX, PA9 输入为 2V;
如果 OTG_FS_GCCFG(offset_0x038) = 0xXX25XXXX, PA9 输入为 3V3;
客户的现象也被发现了。

使用特权

评论回复
8
我只会加减乘除|  楼主 | 2021-11-10 14:10 | 只看该作者
二、解决及总结
在使用 USB 模块的情况下, 正常的话 PA9 是作为 OTG_FS_VBUS 功能使用的,但是也可以作为通用的 GPIO 口。
如果配置成为通用的 GPIO, 在该芯片参考手册中,我们发现:

在以往的印象中, 我们一直认为 PA9 用以监测 VBUS 的供电,在取消该监控时(NOVBUSSENS), PA9 可用作普通 I/O 口,
此时, VBUS 默认永远存在。
通过具体的上述的操作, 可以知道,如果想让 USBD 模块下的 PA9 作为 GPIO 口使用,那么需要满足下面两个条件:
1/由于使用到了 PA9 作为通用的 GPIO 口,我们需要关闭 VBUS sensing(bit 21)功能.
2/Bit 19 VBUSBSEN and Bit 18 VBUSASEN 这两个比特位也需要被复位。
客户按照上述重新配置后,问题不再出现。

使用特权

评论回复
9
磨砂| | 2021-12-6 15:47 | 只看该作者
我没看太明白这个题目

使用特权

评论回复
10
晓伍| | 2021-12-6 16:04 | 只看该作者
USB FS哪种更快啊

使用特权

评论回复
11
八层楼| | 2021-12-6 16:05 | 只看该作者
这个用于检测电压好使吗

使用特权

评论回复
12
观海| | 2021-12-6 16:07 | 只看该作者
我主要用来usb的功能

使用特权

评论回复
13
tpgf| | 2021-12-6 16:08 | 只看该作者
复用的话 硬件上怎么处理呢

使用特权

评论回复
14
guanjiaer| | 2021-12-6 16:13 | 只看该作者
没见过这个型号的额开发版啊

使用特权

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

本版积分规则

16

主题

163

帖子

0

粉丝