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

STM32学习-端口复用(AF)与重映射(Remap)

[复制链接]
STMCU小助手 发布时间:2022-12-12 16:00
对于单片机而言,GPIO引脚配置是最基本的,也是最重要的,因为所有的(信号)输入和(控制)输出都是通过这些配置起作用的。这里就不得不提到单片机的复用功能AF(Alternate Function),这篇文章我们说一说复用功能。
$ \/ r" n' ~9 Z  ~" E! L
640 (8).png * ~/ |. y! q# W: Q3 Z4 y7 J5 b8 A" u

" o; ?' v5 l$ g
STM32Fxx系列单片机的GPIO可以配置为浮空输入(input floating)、上拉输入(input pull-up)、下拉输入(input pull-down)
、模拟输入(analog)、开漏输出(output open-drain)、推挽输出(ouput push-pull)、复用开漏输出(alternate function open-drain)、复用推挽输出(alternate function push-pull)等8种模式。
先说明一下开漏输出和推挽输出的区别。
STM32Fxx系列单片机的输出电路由两个MOS管,分别是P-MOS和N-MOS。1 H3 W5 q  f$ E
在开漏输出模式下,P-MOS管不工作,只有N-MOS管工作。若输入数据寄存器的值为0,则N-MOS导通,IO口输出低电平;若输出数据寄存器的值为1,则N-MOS截止;由于P-MOS不工作,此时IO口既不是高电平,也不是低电平,这种状态被称为高阻态。
0 A& Q3 @# K! W
640 (7).png
STM32F1xx  IO口基本结构

- l! \+ G. O! H( W
在推挽输出模式下,若输出数据寄存器的值为0,则N-MOS导通,P-MOS截止,IO口输出低电平;若输出数据寄存器的值为1,则N-MOS截止,P-MOS导通,IO口输出高电平。
上面提到了STM32Fxx系列单片机还有复用开漏输出和复用推挽输出,它们和上面讲到的(通用)开漏输出和(普通)推挽输出有什么区别?
这就涉及到引脚复用的功能。
使用过单片机的工程师都了解,STM32Fxx内部集成了很多的外设控制器,比如USART、SPI、CAN等,这些外设控制器,也需要通过引脚与外设连接。复用功能就是相对于单片机的引脚而言,所谓“复用功能”,是指单片机的引脚既可以作为普通GPIO使用,也可以作为内部外设控制的引脚使用。
比如看STM32F103xx 单片机的PA5引脚,如下图:
5 Y) d! C* \2 h) B
640 (6).png
% j. p4 |9 Q8 F5 e
首先,PA5可以作为普通GPIO使用;其次,如果作为外设的引脚,它也可以作为SPI1的时钟(SPI1_SCK)使用、DAC的输出通道2(DAC_OUT2)或者作为ADC的输入通道5(ADC12_IN5)。PA5支持三种外设(SPI1,DAC,ADC)在同一时刻只能选择其中一种,选择的方法是开启响应外设的时钟,并使其它外设的时钟保持关闭状态。如果PA5被配置为复用功能,但是没有开启它支持任何外设的时钟,它的输出是不确定的。
复用推挽输出和通用推挽输出在输出时都用到了N-MOS和P-MOS,其输出电路是相同的,区别在于控制输出的信号来源:普通推挽输出控制MOS管的信号来自输出数据寄存器,而复用推挽输出的控制信号来自单片机的内置外设控制器。
复用开漏输出和普通开漏输出是一样的道理。
下面两张图,分别是普通GPIO输出的引脚配置图(其输出信号来自输出数据寄存器)和复用功能的引脚配置图(其输出信号来自芯片内置的外设控制器)。
640 (5).png
, {, a, I# H: h

- P6 Z0 z, D8 ^+ v  h, F( o4 t" y, {
640 (4).png
( W9 I0 l% [0 L8 h9 h
虽然复用模式的控制信号来自内置的外设控制器,但是单片机依然可以读取相应的数据。在复用推挽输出模式下,单片机可以通过输出数据寄存器(output data register)的数据获取上次输出的值,在复用开漏输出模式下,单片机可以通过读取输入数据寄存器(input data register)的值来获取引脚的状态。
% r3 S/ b# Z+ G# t# J% _6 I

8 U$ ?9 B2 w" g3 h; h( ~" V- D- z: V
引脚的重映射(Remap)
在STM32Fxx单片机上,为了是不同器件封装的外设IO口功能数量达到最优,可以把一些复用功能重新映射到其他一些引脚上,目的是为了让工程师更好安排引脚走向和功能,每一个外设的引脚除了具有默认的端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其他的端口。简而言之,就是管脚不够用的条件下,把这个外设功能映射到另外一个管脚去使用。
以串口3为例
+ U* ]! g+ I& U/ Y4 L- C1 E3 H/ j$ s5 A
640 (3).png

/ `0 U6 S" D0 u7 ~' i. i
640发.jpg
2 ?& X  G% L' n6 U+ h) X- e. T- _
上图中,Remap对应的IO就是可以重映射到的IO,default就是该IO默认可复用的功能。上图中可以看到,串口3可以重映射到PC10和PC11引脚,也就是说如果PB10,PB11引脚不好用的时候,或者被占用了,就可以用PC10和PC11实现串口3的功能。
/ I  F# C- ~; g' N
映射也分为部分重映射和完全重映射
  E9 s% |  \- F% Z9 n
-部分重映射:功能外设的部分引脚重新映射,还有一部分引脚是原来的默认引脚
-完全重映射:功能外设的所有引脚都重新映射。

$ [/ o( H3 K- G; D( f
640 (2).png

- A: y* J) s6 ]
640 (1).png

9 Y5 [* H+ p9 R
  
引脚重映射配置过程(串口3为例):
3 g2 @0 D6 i1 v2 Q2 H% n1. 使能GPIO时钟(重映射后的IO);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
4 x% d/ ~( ^+ _2. 使能功能外设时钟(例如串口3);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART3,ENABLE);
3. 使能AFIO时钟。重映射必须使能AFIO时钟:
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
4. 开启重映射。
    RCC_PinRemapConfig(GPIO_Remap_USART3,ENABLE);
. O2 e1 [5 {0 U& |
注意以下要点:/ ~5 L' E7 }9 V. v1 b$ G7 H
1)对于复用的输入功能,配置必须为上拉/下拉或者浮空;
2)对于复用输出功能,配置必须为复用功能输出模式(推挽,开漏)。
对于双向复用功能,必须配置为复用功能输出模式(推挽或者开漏),此时输入驱动器配置为浮空输入模式。
如果将一端口配置成复用输出功能,会将引脚和输入寄存器断开,并和片上外设的输出信号连接,
如果软件将一GPIO 口配置为复用输出功能,但外设没有被激活,它的输出将不确定。
要正常使用GPIO 复用功能,分三步来配置:
第一步,位寄存器配置;
第二步,开启对应的外设时钟;
第三步,激活该端口。
二、端口重映射
优点:优化电路设计;扩展功能,减少外设芯片资源;
640.png
, l' `# t4 X& e8 v7 X* g
转载自: 不懂幽默的秦二
# V0 N3 V) q( o$ p& }2 V2 v
8 A  P# k. D* o4 Q
收藏 评论0 发布时间:2022-12-12 16:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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