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

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

[复制链接]
STMCU小助手 发布时间:2022-11-24 21:22
1、对于单片机而言,GPIO引脚的配置是很基础也是很重要的。错误的引脚配置非但不能实现想要的功能,而且出错时往往不容易查找,耽误调试的时间。这就需要编程调试人员对GPIO引脚的配置有很好的理解。今天这篇文章,我们就来谈谈STM32Fxx系列单片机引脚的复用功能(Alternate Function)。
' M% m0 H) c) r, z5 Z9 ^0 D0 Z! B; [2 n4 q5 S4 e" W1 L
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)输出等八种模式。 下图为芯片数据手册的内容:
+ m& L; n. a8 y4 ^/ U  J3 A- O- h2 W& N- U
d51c9f1b7c80458a81d91ecd907c0d22.png
9 ?# G% C8 Q+ u0 |+ }2 _: t$ b4 L# h3 e5 D* J0 }+ W( l* M( `: t
3、上拉电阻,在引脚空闲状态下(无外部输入时),给引脚一个默认的电平状态(高电平)* w* h3 ?4 |& l, e

/ O) W' Z* ?+ v( m& I5 r下拉电阻,在引脚空闲状态下(无外部输入时),给引脚一个默认的电平状态(低电平)
; T; C" i; d1 a5 K9 x* u8 D& w  K! A3 M/ s9 X
开漏输出,可以直接输出一个低电平,但是不能直接输出高电平(可以借助外部上拉电阻)( Y+ D7 l% c2 G0 {* p

, l/ A( P! D+ g; X推挽输出,可以直接输出高电平和低电平# ], |8 `# E! _0 z0 B. [' b
4 H# D3 S- G$ ]# @( c0 S1 `; c  y. K
        4、输入模式
$ g2 W7 X4 D8 n: U- `& I6 f0 N( T) x: c9 R* [& F
108db4f3e3aa4248ab3e81b7bae96766.png - ]2 @* y4 _, c7 g: R
2 D- c- T" f' I- I
注意:每个引脚内部都有两个电阻(上拉电阻+下拉电阻),但是引脚内部的上拉电阻是一个弱上拉(驱动能力比较弱),如果打算给引脚一个确定的电平,建议在引脚外部接上拉电阻。3 Q% W5 G" H. W9 w& S8 X! h
+ H  ^7 W2 H; o0 T/ D' j
5、输出模式/ ^* `! ^1 r' o

2 R4 q! n# |* f7 A, ~& }: O) B 882ee53dc1f84b8f9ee8bd0663c5cf94.png 8 y9 d8 h* n* V# w6 O0 l

" k5 i( `+ \  `: i" C: @! jMOS管和N-MOS管循环导通,这样的好处是可以提高负载能力和切换速度,并且可以降低功耗。+ N0 Z8 q7 r9 _9 J* A/ _
+ v2 W$ a$ L% v$ s; ~
先来介绍下开漏输出和推挽输出的区别:7 F) M5 E* i% j* @
1 r; s+ S' T3 R! `( d8 J0 M: S/ ]. B
STM32Fxx系列单片机的输出电路有两个MOS管:P-MOS和N-MOS。5 n( @  s$ j2 ?" F- o4 A) B9 }
3 @' _' j; x8 l
在开漏输出模式下,P-MOS管不工作,只有N-MOS管起作用。若输出数据寄存器的值为0,则N-MOS导通,IO口输出低电平;若输出数据寄存器的值为1,则N-MOS截止;由于P-MOS不工作,此时IO口既不是高电平,也不是低电平,这种状态被称为高阻态。
; ~$ M0 ?( q1 }9 _# Q  }0 M+ k6 m  N
" H, P9 y3 |+ R# c在推挽输出模式下,若输出数据寄存器的值为0,则N-MOS导通,P-MOS截止,IO口输出低电平;若输出数据寄存器的值为1,则N-MOS截止,P-MOS导通,IO口输出高电平;
+ j; ^; u- B  w, _, M4 [' Y  t5 D/ h
我们知道STM32Fxx单片机还有复用开漏输出和复用推挽输出,它们和上面讲到的(普通)开漏输出和(普通)推挽输出有什么区别呢?
, @! g! w- T. r
- E1 [0 n4 O( l- j% Q2 {这就涉及到针脚的复用功能。0 B+ `# t6 v6 i1 ^$ @+ o
" B* `! x! @, U3 I0 `2 t: i
我们知道,STM32Fxx内部集成了很多的外设控制器,比如USART、SPI、bxCAN等等,这些外设控制器,也需要通过引脚与外设连接。复用功能是相对于单片机的引脚而言的。所谓“复用功能”,是指单片机的引脚既可以做普通GPIO使用,也可以作为内部外设控制器的引脚来使用。
2 L5 N. P: ]) g( y* Y  c& `0 W) M$ R, ?: O
; W/ C: W) G7 F% X$ M% e+ j比如我们来看看STM32F103xx单片机的PA5引脚,如下图:( G  F* ~7 n7 e% o8 ?8 L
6 X9 n' U+ s- S0 z6 Z' k
c81a83f58db1dda19e8a8226676315bd.jpg ) X( a9 b5 c1 g* V& d! v
1 v# {2 z4 F/ X0 j5 A
首先,PA5可以做为普通GPIO来使用;其次,如果作为外设的引脚,它可以作为SPI1的时钟(SPI1_SCK)、DAC的输出通道1(DAC_OUT1)或者ADC的输入通道5(ADC12_IN5)。
8 x1 s. [& j* \8 r- u8 U6 t/ Y
5 t2 G- u" d9 T! m0 FPA5支持的三种外设(SPI1、DAC、ADC)在同一时刻只能选择一种,选择的方法是开启相应外设的时钟,并使其它外设的时钟保持关闭状态。如果PA5被配置为复用功能,但是没有开启它支持的任何外设的时钟,它的输出是不确定的。. [) U- K% L$ j% Y7 l
8 `2 z1 O! I" x6 f, e8 E8 Y
复用推挽输出和(普通)推挽输出在输出的时候均使用两个MOS管(P-MOS和-MOS),其输出电路是相同的。区别在于控制输出的信号来源:(普通)推挽输出控制MOS管的信号来自输出数据寄存器,而复用推挽输出的控制信号来自单片机的内置外设控制器(比如SPI1)。
! J, O' j: p4 W. i+ M9 b
/ M* V; F* x2 A( h- j复用开漏输出和(普通)开漏输出的道理是一样的。
( d* b9 ^8 |) \# ?. D4 U, A5 j4 e! a! S: ~
下面这张图,是普通GPIO输出的引脚配置图,可以看到其输出信号来自输出数据寄存器(Output data register):4 O& S) ]" K( M, l1 g
% n1 ?9 I/ m- K  i7 M
89a50950c16733999e4c55ae6e5f358b.png + q# h1 ~! B4 V/ `9 I, I$ _

! ?9 |/ I6 {7 U1 n; X0 o下面这张图,是选择复用功能后的引脚配置图,可以看到其输出信号来自芯片内置的外设控制器:, D. D( p% w: F; N4 e  q
# `+ ?+ m# W2 z- ?6 X1 B; c
注:虽然复用模式的控制信号来自内置外设控制器,但是单片机(CPU)依然可以读取相应的数据。在复用推挽输出模式下,单片机可以通过读取输出数据寄存器(Output Data Register)的数据来获取上次输出的值;在复用开漏输出的模式下,单片机可以通过读取输入数据寄存器(Input Data Register)的值来获取引脚的状态。  ~: R. ?% g" s
————————————————
. G" o! R4 v! |! n- j8 @版权声明:阿文的储物间
9 B# S0 A  h9 W* G* v3 d% j! t
1 ]$ d6 m- E8 f
收藏 评论0 发布时间:2022-11-24 21:22

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版