你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【实战经验】STM32 USBD VBUS GPIO

[复制链接]
zero99 发布时间:2017-6-29 17:02
STM32 USBD VBUS PA9 as GPIO

6 {8 `8 r3 L0 `, }8 s/ e. e前言* `" F2 R0 S0 T/ U, V9 j
某客户准备用STM32F205VCT6做USB FS Device设备时,配置PA9作为普通通用的GPIO口(外部上拉电阻10K到电压3.3V,NO PU/PD),在项目测试的时候发现,该引脚上的电压只有2V。" R+ e0 R) H% n* ?1 p2 P

3 C6 M. b* b9 P$ q) Z' b+ U一、现象的复现
% @2 K" N  I7 u8 T硬件:Nucleo-F207ZG board,利用CubeMx生成代码出现同样的问题:
, J- [) @( M# ]7 l
21.png ( x4 Z) V3 x! o1 q0 u: G8 e
对于硬件,客户的示意图如下:
4 A, v( x: Q& h# ^, d5 }
22.png
, A: s( ~3 ^7 M, ~' t  [
23.png 7 R$ l0 v4 S2 B+ r1 S
所以参考该nucleo的原理图,修改,移除掉R35电阻,自己添加一个色环电阻至3.3V ;
$ u. L4 w! P% l
: u8 ^2 g% {9 ~( V1.1 PA9为通用输出GPIO,未使用USB FS模块" e( u# \0 S: ~& e/ E
配置 PA9为通用GPIO输出引脚Open Drain模式,没有其他的MCU外设IP被使用,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3,利用示波器测试,PA9为3V3输出;; @1 ^$ i6 r9 M8 K$ g& c
24.png
, k; u) I4 J7 T" Q( h0 q; \" C% u5 `! m. B; d  N* ?- A
1.2 PA9为输出GPIO,开漏模式,使用USB FS模块- |9 {/ @) ]) g5 Z1 t4 @7 n1 P
使用该MCU的USB FS 设备IP,并且配置PA9为输出,Open Drain mode模式,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。
6 b$ M# z+ S- d9 j7 O6 l- @" a测试发现,如果配置:0 e  f& j9 u% v9 {% M
如果OTG_FS_GCCFG(offset_0x038) = 0xXX2DXXXX,那么PA9 只有2V 输出;
) [; t) N- Y- r$ }9 ?如果OTG_FS_GCCFG(offset_0x038) = 0xXX25XXXX,那么PA9 会有 3V3 输出;& H, _$ U  V3 G- s/ x
客户的问题被发现。/ C' h2 K4 V: ]2 |
25.png
; `' f  `2 L# N/ {' ?: \& `7 W0 d& t
1.3 PA9为输出GPIO,推挽模式,使用USB FS模块
9 k7 t7 X! J/ N" [6 x0 w使用该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 r- T: l1 T- T  U4 C
! K0 a' v9 ]7 Q# j9 |
1.4 PA9为输入GPIO,NO PU/PD,未使用USB FS模块
# C1 T7 w! E9 v$ b9 O1 J, f配置MCU的PA9为通用的GPIO引脚,输入模式,no PU/PD,没有使用MCU的其他外设IP,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。 测试发现PA9为3V3输入。
4 g( }3 _5 C) j3 S
+ y% I) I5 V+ M  K1. 5 PA9为输入GPIO,NO PU/PD,使用USB FS模块8 m& t4 [# Q* R( h' Q- J
配置MCU的PA9为通用的GPIO引脚,输入模式,no PU/PD,使用了MCU的USBD FS外设IP,PA9被 10Kohm的色环上拉电阻拉到Vdd电压3V3。 测试发现:
6 f: D" M0 F* O7 G" ~, B0 b( T如果OTG_FS_GCCFG(offset_0x038) = 0xXX2DXXXX,PA9 输入为2V;
2 C- D  R! z% R7 B1 T& j- a: F; ~4 l如果OTG_FS_GCCFG(offset_0x038) = 0xXX25XXXX,PA9输入为3V3;
$ M- Y" i. [" F) y% }" x客户的现象也被发现了。& \1 r; b& K% C- z# l
# V2 I; I$ c8 P6 A* J; P( M2 }1 o
二、解决及总结8 F0 `1 ~8 _4 @5 R+ t6 ?
在使用USB模块的情况下,正常的话PA9是作为OTG_FS_VBUS功能使用的,但是也可以作为通用的GPIO口。  ?( _. f0 z8 h1 }
如果配置成为通用的GPIO,在该芯片参考手册中,我们发现:+ B$ u: h6 ]- W0 v9 J) j  G% b- J
26.png - o6 @4 B- u$ Z& J! i

. F. w% s( L) [: V在以往的印象中,我们一直认为PA9用以监测VBUS的供电,在取消该监控时(NOVBUSSENS),PA9可用作普通I/O口,此时,VBUS默认永远存在。1 h# e& ^7 @9 U) @0 N
通过具体的上述的操作,可以知道,如果想让USBD模块下的PA9作为GPIO口使用,那么需要满足下面两个条件:
; h7 E" N" U& G/ m1 U$ G1/由于使用到了PA9作为通用的GPIO口,我们需要关闭VBUS sensing(bit 21)功能.
; a6 E) g( z; Z: d# X2/Bit 19 VBUSBSEN and Bit 18 VBUSASEN 这两个比特位也需要被复位。
: @  }; H% X/ F5 }3 M客户按照上述重新配置后,问题不再出现。& {% E! h' Z# W; M

0 [5 E! _; o# A6 h) L; H- ]
- ~1 Z  ]( l; `( l; v
" [. e- W  @0 k/ W/ O& s0 A文档下载
3 q& U) B; _* j3 u. W) U8 H" {" ~+ I" c  R
更多实战经验
' O+ B. i0 D/ i5 [) ?  X
收藏 评论5 发布时间:2017-6-29 17:02

举报

5个回答
ruigewei5 回答时间:2017-6-29 17:09:52
谢谢楼主
arenas 回答时间:2017-6-29 18:14:12
感谢分享
Paderboy 回答时间:2017-6-29 21:16:51
多谢分享。
weigr 回答时间:2017-6-29 22:19:18
参考: \$ B9 D8 U) k  X. e: ^- N# u
MrJiu 回答时间:2017-6-30 10:12:46
看一看!!!!!!11

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版