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

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

[复制链接]
yumeii 发布时间:2019-12-26 14:23
1.png
2 u" z' K+ I  C/ l/ y
3 K7 ?1 E* d7 W! k0 w( `) v7 u
6 T  m2 c# w2 n
我们在使用ST公司的STM32CubeMx工具对STM32芯片做管脚初始化配置时,点到某个管脚时会自动拉出一条长长的可配置的菜单选项。有人可能发现某些类似上面图形的情况,某管脚可以配置为ADC某输入通道,怎么同时还有个GPIO_analog选项呢?二者有什么差别?
4 x  n' i& _  p! ]& `  @
/ t6 [; p4 z' ~; j

! r0 E- _$ f& a; E& [ADC_Inx这个不难理解,就表示该GPIO可以作为ADC模拟输入通道,此时该GPIO也确实处在Analog模式。那还额外弄个GPIO_Analog干什么呢?跟ADC_Inx不是一个意思吗?5 v* r0 f. l0 h/ B% {

# \8 r! k/ K6 y( E6 c7 Q
* L5 K( V3 M- B1 m" E
的确不是一个意思。
1 h' u) k* q: T/ T7 U, W. e& N7 ~+ T* U# m$ L% o

8 Y# W( J# t$ M2 `' g6 L其实,GPIO_Analog跟GPIO_Input或GPIO_Output一样,也是GPIO工作模式的一个选项。具体到这里,ADC_Inx作为模拟输入通道,此时GPIO处于analog模式。但是,不能说GPIO配置在analog模式就是做ADC转换通道,它还可能做比较器、DAC等模拟外设的复用通道,也有可能纯粹只是被配置成Analog模式,跟其它模拟外设没有任何关联。
7 L0 R4 y) W. [! P9 K3 j/ P3 e' n$ O) u& J+ u
. ?/ i- D* v7 K" E, |
一般来讲,STM32的GPIO输入状态分为三类,其中Analog状态是GPIO输入模式的一种。, P- o7 f3 D2 C! g
2 @$ Z4 X; u3 ~: S

. `; U) o& x+ B1、 上拉/下拉输入【push up/pull down】
" R9 S: d6 j7 r# V4 V) D( N+ I: v4 w' q: q
7 {7 s; ~$ `1 c& W% I9 q/ }
2、 浮空输入【Floating input】- p! H! h  I' v3 [0 p0 s
6 [" E+ `8 Z* W
4 K$ K7 P* _, D0 @( ]) D
3、 模拟状态   【Analog】
4 p6 j- L/ x& g2 V) a( Z
: A7 c' f$ D: y  S* P( a% F3 @+ i* c

& W8 C8 R. L7 ?! b3 O8 k" Q7 W9 u对于前面1、2两种输入模式的GPIO功能框图如下:! E3 a( k+ Y$ L* a- a' Q
1 F- i" Y/ T7 e0 [

# W1 G) [% W/ `. o! { 2.png
, S! M( T+ z3 S
2 h- S3 k1 E9 s1 N& q7 o

7 N, ]7 G; Q, D& G, \' G; H* ]5 H此时,输出缓冲被禁用;图中的施密特触发器被启用;IO脚的数据被采样到数据输入寄存器可被读取。上/下拉电阻根据需要可以被打开或禁用。当上下拉电阻同时被禁用时即为浮空输入模式。
4 d1 m# ?& Z9 ]9 Z. ]- o. _2 J5 q. F2 K  Y$ F# \

9 B+ U1 a! S* T- X, C( ]对于STM32芯片,复位后GPIO默认为浮空输入状态。对于不使用的GPIO,不建议让GPIO处于浮空输入模式。当它没有外接信号时,那个施密特触发器往往在随机地做电平翻转跳变,从而带来噪声并增加芯片的功耗。同时浮空脚对外部噪声或干扰敏感,对过ESD也极为不利。
, x* }! Q! p2 ?5 Y/ Q# y0 d5 l2 V3 I# X! m

1 {& M# y6 r: |& B上面是介绍的浮空输入与上下拉输入的框图与特征,而GPIO的Analog模式的功能框图如下:* q( O' C  g6 j3 T# W
' v6 o& M8 o9 @5 i' G
% @' D% h  `( N2 H/ q1 f6 a3 @) M: L
3.png
  o# T' v; }- a" ^' Y7 U
: R+ J/ p3 ^& q+ B* E

* n# r$ h/ ~# y- K这个Analog模式的GPIO状态跟上面的带可配置上下拉输入的GPIO状态主要有两个明显差别:
: H1 @2 i( I$ f% r2 z" [; N4 n8 Y
" P8 H" ^1 v% ~: s

% n& z/ t0 B; O8 S$ y1、 那个施密特触发器被关闭了,该触发器输出恒为0。: r3 V& {& y6 c. v# c
5 J" y6 b4 D9 W- t
2、 内部的上下拉电阻被关闭了。
( ~2 E5 ?( n: q% N  y$ w7 a: k' u  F& E  m( U) I
& m" t: R! w9 x6 y- d
这个施密特触发器被关闭了,GPIO的数字输入功能被取消。如果此时读取输入数据寄存器的值,结果恒为0.由于关闭了施密特触发器,上面提到的因它而起的电平跳变噪声和相应的额外功耗就没有了。& L7 Q9 h2 T+ I8 a

5 k' v1 w- K$ a6 Z$ g) h
' T' G8 s: k% k0 L  b
换句话说,当GPIO状态由浮空或上下拉输入状态改为Analog状态时,既消除了因为施密特触发器带来的噪声,同时又因它的关闭而降低了芯片动态功耗。  U& F% w- Y: w+ T
% @' `% ]. L& }# S
1 y' g( ^1 B. [6 ~1 G3 Y1 R( B) i
另外,配置在GPIO_Analog状态的GPIO属于高阻态,这点也有利于保持模拟信号的真实性。
5 |/ M# e: z' t6 o$ p5 `* `) Z9 n" @- j5 x# g' a- `4 A

* j2 ?& t6 E' O聊到这里,我们基本可以消除开篇的疑惑了。GPIO可能被配置为某些模拟外设的复用脚,比如ADC,DAC的复用功能脚等,但也完全可能不做任何模拟外设的复用脚,只是配置在Analog模式而已。比方对于那些不用的管脚,我们都可以将其配置为GPIO_Analog状态。做过STM32芯片低功耗应用的人可能会在ST官方例程里发现过,在进低功耗模式之前对不用外设的对应GPIO都配置为Analog状态了。9 E2 P2 h9 C+ w0 d, t

, C- j) d1 M0 f
赞 收藏 评论0 发布时间:2019-12-26 14:23

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版