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

基于CubeMx管脚配置时的STM32芯片做管脚初始化配置选项

[复制链接]
yumeii 发布时间:2019-12-26 14:23
1.png 1 T. A/ H- V3 g

! N! o; t5 F3 \* i9 a& r
. b6 Y9 B0 f! N9 j8 [* d
我们在使用ST公司的STM32CubeMx工具对STM32芯片做管脚初始化配置时,点到某个管脚时会自动拉出一条长长的可配置的菜单选项。有人可能发现某些类似上面图形的情况,某管脚可以配置为ADC某输入通道,怎么同时还有个GPIO_analog选项呢?二者有什么差别?
: ]3 D1 ?: d( s5 {" o  l
1 |9 |# O. q5 I% l- Q) |  U: s
: ~  n1 A; F  [/ h. W2 `
ADC_Inx这个不难理解,就表示该GPIO可以作为ADC模拟输入通道,此时该GPIO也确实处在Analog模式。那还额外弄个GPIO_Analog干什么呢?跟ADC_Inx不是一个意思吗?: Z( p& C; S7 [1 g. @* Z

( O5 B( q$ z7 V/ b1 j
5 }9 r4 G+ y% M0 F* D0 t
的确不是一个意思。# @# C, u$ w; ]7 S( m; T% ?7 i0 Y! D
! K- [' X, Z2 h( h! O

+ k4 L( D! H0 Y3 ^$ V% r# X2 [$ M其实,GPIO_Analog跟GPIO_Input或GPIO_Output一样,也是GPIO工作模式的一个选项。具体到这里,ADC_Inx作为模拟输入通道,此时GPIO处于analog模式。但是,不能说GPIO配置在analog模式就是做ADC转换通道,它还可能做比较器、DAC等模拟外设的复用通道,也有可能纯粹只是被配置成Analog模式,跟其它模拟外设没有任何关联。$ b6 E& ^3 |5 l) R. G; e

  Y2 N8 w( b, r; o
/ V# V: T; ?( I+ ^
一般来讲,STM32的GPIO输入状态分为三类,其中Analog状态是GPIO输入模式的一种。
! ^5 O9 B' L1 i. y3 m6 A) P8 D9 r) N! g; q( \3 x/ [
. H% `, Y: }6 U7 ]0 J
1、 上拉/下拉输入【push up/pull down】# c' |9 |7 f1 A% }2 J% e$ ]; x+ |
0 f, z+ r' ]/ l( [4 |) d

$ v4 n% r/ Q3 ^7 j# B" ?8 h- u2、 浮空输入【Floating input】
7 c5 Z2 {; l4 p5 z1 w, e  x7 U, `2 J0 b
3 V# a; j0 s1 A" M. h4 P; [
3、 模拟状态   【Analog】
# {+ Y1 |) t, T7 b( o: x
1 W: r- l8 o( f8 E1 M1 g
% I# J) a) D3 b$ n: a2 {
对于前面1、2两种输入模式的GPIO功能框图如下:8 e! c0 s* i' l
; C4 V: k; o3 e# b5 i/ j0 z

: L" Z: R* P) V4 H* ]. f- M 2.png + T5 p" d6 K+ O  o, g4 |
" L* D4 d8 J- l' ~, H

# Q6 K) E, s4 Z& H! c此时,输出缓冲被禁用;图中的施密特触发器被启用;IO脚的数据被采样到数据输入寄存器可被读取。上/下拉电阻根据需要可以被打开或禁用。当上下拉电阻同时被禁用时即为浮空输入模式。: @5 \) ?; k+ [, R

% D) r8 ]8 n- ]
0 f1 Q6 v- w, |
对于STM32芯片,复位后GPIO默认为浮空输入状态。对于不使用的GPIO,不建议让GPIO处于浮空输入模式。当它没有外接信号时,那个施密特触发器往往在随机地做电平翻转跳变,从而带来噪声并增加芯片的功耗。同时浮空脚对外部噪声或干扰敏感,对过ESD也极为不利。7 \7 g$ B; X: k' I
. ?: Q* O+ q0 c; a( I2 P7 g

. e; u3 |! _2 N上面是介绍的浮空输入与上下拉输入的框图与特征,而GPIO的Analog模式的功能框图如下:
/ {7 N5 W- p0 {. I
# f2 ]1 @0 i- c: A

7 A. _0 ]: ]- ~# S 3.png 5 O2 Z' ]1 Y, a" C, D2 Q
& B# h6 ~% n2 y! F: X

; e4 Z3 `7 V, k8 p: V* N; u; N这个Analog模式的GPIO状态跟上面的带可配置上下拉输入的GPIO状态主要有两个明显差别:" S, w9 Y+ b* F' m$ Q& z8 W8 _' z

# K, h: w2 N7 |" ]7 O) S0 M! O+ c

- Z4 o/ L; D4 I1、 那个施密特触发器被关闭了,该触发器输出恒为0。9 q5 L" N4 _4 W$ ?2 c5 \. A3 }, i, @
$ f# h$ K: \% O* @
2、 内部的上下拉电阻被关闭了。
' f8 N+ }( A8 u) F1 e: W+ c, J4 j9 ^3 F3 w

1 B2 E' D; b# ~$ P这个施密特触发器被关闭了,GPIO的数字输入功能被取消。如果此时读取输入数据寄存器的值,结果恒为0.由于关闭了施密特触发器,上面提到的因它而起的电平跳变噪声和相应的额外功耗就没有了。
9 \/ f  u: j$ E. J. j# m5 J
  c7 `4 g# g) h: ?  U3 p8 a5 i

1 A$ i+ n6 j1 o换句话说,当GPIO状态由浮空或上下拉输入状态改为Analog状态时,既消除了因为施密特触发器带来的噪声,同时又因它的关闭而降低了芯片动态功耗。
, g- y3 ^* X" g9 h. o$ f3 S* Y
' w% l' X( C5 n; Z# }5 J  ?( J
6 u% M% w& [* y% H4 }8 A
另外,配置在GPIO_Analog状态的GPIO属于高阻态,这点也有利于保持模拟信号的真实性。( Z; k# W7 W2 q$ o' `! J! U' u
; B1 O- l, {+ R$ u
4 L# r) p7 c: K# W8 `
聊到这里,我们基本可以消除开篇的疑惑了。GPIO可能被配置为某些模拟外设的复用脚,比如ADC,DAC的复用功能脚等,但也完全可能不做任何模拟外设的复用脚,只是配置在Analog模式而已。比方对于那些不用的管脚,我们都可以将其配置为GPIO_Analog状态。做过STM32芯片低功耗应用的人可能会在ST官方例程里发现过,在进低功耗模式之前对不用外设的对应GPIO都配置为Analog状态了。
# P: K! e: Q& I5 ?; z$ P9 y+ ~( \* ?4 H
收藏 评论0 发布时间:2019-12-26 14:23

举报

0个回答

所属标签

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