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

如何理解STM32单片机引脚的复用功能?

[复制链接]
STMCU小助手 发布时间:2022-11-24 21:22
1、对于单片机而言,GPIO引脚的配置是很基础也是很重要的。错误的引脚配置非但不能实现想要的功能,而且出错时往往不容易查找,耽误调试的时间。这就需要编程调试人员对GPIO引脚的配置有很好的理解。今天这篇文章,我们就来谈谈STM32Fxx系列单片机引脚的复用功能(Alternate Function)。" G8 O! h0 o( R- H$ @- C/ X
, N# G& X8 h0 H
2、STM32Fxx系列单片机的GPIO引脚可以配置为浮空输入(Input Floating)、上拉输入(Input Pull-up)、下拉输入(Input Pull-down)、模拟量(Analog)、开漏输出(Output Open-drain)、推挽输出(Output Push-pull)、复用开漏(Alternate function open-drain)输出和复用推挽(Alternate function push-pull)输出等八种模式。 下图为芯片数据手册的内容:( }2 P  b; P7 c0 r0 i

% g4 e* @) H) m1 x1 i4 v d51c9f1b7c80458a81d91ecd907c0d22.png
) \) d- y! O3 |& j5 u8 J" r$ P  O2 s5 j: @1 Y
3、上拉电阻,在引脚空闲状态下(无外部输入时),给引脚一个默认的电平状态(高电平)
6 @9 f! E2 Y* d/ d- h% O" l0 z+ g; D- V: T+ i+ z6 c
下拉电阻,在引脚空闲状态下(无外部输入时),给引脚一个默认的电平状态(低电平)4 q7 Q, T# ]8 u  J) _) x

2 w: {+ r. K8 d6 R% Q  O, a  l开漏输出,可以直接输出一个低电平,但是不能直接输出高电平(可以借助外部上拉电阻)8 {, ?% p4 k! w
9 }5 k. I* J; a# Q$ v) [
推挽输出,可以直接输出高电平和低电平
4 q, N) z6 j5 o: {0 H0 A0 \+ }& F9 m  T% f3 S# ?6 X6 O
        4、输入模式! e' ?8 @" }2 Y) C
4 u% a4 ^/ s& @3 F
108db4f3e3aa4248ab3e81b7bae96766.png 5 p) H" K! u+ S4 @. d% V
1 g( O) w  e8 Y& \1 W5 j5 y7 B0 `+ s
注意:每个引脚内部都有两个电阻(上拉电阻+下拉电阻),但是引脚内部的上拉电阻是一个弱上拉(驱动能力比较弱),如果打算给引脚一个确定的电平,建议在引脚外部接上拉电阻。( W1 U  ^! n4 x& R% ?
& }3 |/ F# b& t. J6 c
5、输出模式$ g1 \0 g; i$ u0 l; d; ^# [# p! N

/ p" i6 b9 M4 [1 A' y 882ee53dc1f84b8f9ee8bd0663c5cf94.png # ~+ ?5 o6 p' {7 I* `4 y
* O+ t$ R$ J# u; n+ B
MOS管和N-MOS管循环导通,这样的好处是可以提高负载能力和切换速度,并且可以降低功耗。
! p, }5 ^4 Z0 b- R% }+ V
: I5 P6 @2 U; E5 G% v  x( v( b 先来介绍下开漏输出和推挽输出的区别:/ z! t; P7 ?/ d% g" i: w" @
( y, h- \$ ?4 X! |- A
STM32Fxx系列单片机的输出电路有两个MOS管:P-MOS和N-MOS。
! d& M! e. l+ e( R5 p
' ?5 v( y8 R0 A$ z在开漏输出模式下,P-MOS管不工作,只有N-MOS管起作用。若输出数据寄存器的值为0,则N-MOS导通,IO口输出低电平;若输出数据寄存器的值为1,则N-MOS截止;由于P-MOS不工作,此时IO口既不是高电平,也不是低电平,这种状态被称为高阻态。! Q# D' P, Q" N0 U# s

4 A" {: t% Y, p) F) q* g在推挽输出模式下,若输出数据寄存器的值为0,则N-MOS导通,P-MOS截止,IO口输出低电平;若输出数据寄存器的值为1,则N-MOS截止,P-MOS导通,IO口输出高电平;
& `8 z* T# T  W( M6 \9 h6 k1 |+ `" k2 @5 K
我们知道STM32Fxx单片机还有复用开漏输出和复用推挽输出,它们和上面讲到的(普通)开漏输出和(普通)推挽输出有什么区别呢?
. c  p: C* C3 E/ N5 \6 R. q2 N% Y- z8 A  D9 y* Q, q
这就涉及到针脚的复用功能。
: b- w( L3 s4 D$ H
2 y* Y; o9 b" U4 c" u- |1 t, t我们知道,STM32Fxx内部集成了很多的外设控制器,比如USART、SPI、bxCAN等等,这些外设控制器,也需要通过引脚与外设连接。复用功能是相对于单片机的引脚而言的。所谓“复用功能”,是指单片机的引脚既可以做普通GPIO使用,也可以作为内部外设控制器的引脚来使用。
8 m$ E+ w6 _: I  A" [# Z
! `9 S1 a" v( @9 a( T. v比如我们来看看STM32F103xx单片机的PA5引脚,如下图:
8 e/ F& Z. L! y4 ?7 z
0 k1 o) E0 C6 g( N0 ]7 ]% ?1 Y c81a83f58db1dda19e8a8226676315bd.jpg 7 }' y9 D  ?2 X3 D
9 L- o; I/ M/ r: N" n0 d
首先,PA5可以做为普通GPIO来使用;其次,如果作为外设的引脚,它可以作为SPI1的时钟(SPI1_SCK)、DAC的输出通道1(DAC_OUT1)或者ADC的输入通道5(ADC12_IN5)。
9 {# J/ o" o* V2 _, s6 W: }- i( k: b% A
PA5支持的三种外设(SPI1、DAC、ADC)在同一时刻只能选择一种,选择的方法是开启相应外设的时钟,并使其它外设的时钟保持关闭状态。如果PA5被配置为复用功能,但是没有开启它支持的任何外设的时钟,它的输出是不确定的。8 c$ Q5 U4 Q  R+ _: C' [$ K2 ^( I6 [
  @  V8 I7 D$ P& ]% X  b
复用推挽输出和(普通)推挽输出在输出的时候均使用两个MOS管(P-MOS和-MOS),其输出电路是相同的。区别在于控制输出的信号来源:(普通)推挽输出控制MOS管的信号来自输出数据寄存器,而复用推挽输出的控制信号来自单片机的内置外设控制器(比如SPI1)。$ u  I9 Y$ Q+ A+ E. j5 g! z
" P) I8 G* \0 D  V
复用开漏输出和(普通)开漏输出的道理是一样的。
/ W+ G$ Z& G$ c1 {3 m# a0 b! \8 L3 e! f8 |. h
下面这张图,是普通GPIO输出的引脚配置图,可以看到其输出信号来自输出数据寄存器(Output data register):8 L0 X9 L! [  d& k9 y* f
& F+ x  ]4 ^, I! v- W" D
89a50950c16733999e4c55ae6e5f358b.png & @# [# o6 @$ D' t2 R
0 S- t3 p! S7 Z& s
下面这张图,是选择复用功能后的引脚配置图,可以看到其输出信号来自芯片内置的外设控制器:
( l0 M( W& I# h, G6 e" e+ L; }0 Y3 Z9 o% e7 r) D6 I
注:虽然复用模式的控制信号来自内置外设控制器,但是单片机(CPU)依然可以读取相应的数据。在复用推挽输出模式下,单片机可以通过读取输出数据寄存器(Output Data Register)的数据来获取上次输出的值;在复用开漏输出的模式下,单片机可以通过读取输入数据寄存器(Input Data Register)的值来获取引脚的状态。
8 O! I, k3 Y; @+ D7 T1 x————————————————7 ]* i" l3 @. O! V
版权声明:阿文的储物间
- L7 b5 q. Q, v8 N* D+ X: j3 q9 ?6 O* B) g! J
赞 收藏 评论0 发布时间:2022-11-24 21:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

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