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

STM32心得:端口复用和重映射

[复制链接]
STMCU小助手 发布时间:2022-11-21 17:00
主要内容:+ C( i9 d1 }3 S* V" m
1) 端口复用;
( g- h4 {9 A# w+ x  N% g2) 端口重映射。
' O' K; B) F# `& j8 m
! o5 T/ [3 B6 Y' X- t1 A% h1. 端口复用概念- U7 q8 Z8 }9 w" W! G
STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。
: J" @6 B3 [8 q例如串口1 的发送接收引脚是PA9和PA10,当我们把PA9和PA10不用作GPIO,而用做复用功能串口1的发送接收引脚的时候,叫端口复用。) T! J* v; S( w  V
20200404174911935.png
" i! {4 Y# i8 B5 z% y% e7 P1 e
2. 端口复用配置过程(以PA9,PA10配置为串口1为例)
# {2 T7 ]. S4 c- [1 V$ g0 F! `2.1 GPIO端口时钟使能(使能端口时钟):8 l8 F2 e- L8 g' `1 K4 o" Q

7 p8 P. [) f! D, B
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
复制代码

0 I, b3 e' s) Q3 y0 B" D* }2.2 复用外设时钟使能(要将端口PA9,PA10复用为串口,因此要使能串口时钟):
( V" G1 l; u6 x- P3 d( o) O5 b8 q- D* a' F8 I: y  q
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
复制代码
* N9 U- ^) L0 {* m. t% c. z
2.3 端口模式配置(设置 GPIO 端口模式,查找《STM32中文参考手册V10》了解复用功能下如何设置GPIO);3 w7 p2 g: \/ I2 ?% d6 J
/ o& k- Y# n1 f$ V
20200404174347967.png
4 j1 f5 y( j8 r# ~9 @* n) m6 f3 K) h) U1 C* n' p  b9 V- |7 N
2.4 由上表可知,要配置全双工的串口 1,USARTx_TX 管脚配置为推挽复用输出,USARTx_RX 管脚配置为浮空输入或带上拉输入,部分代码如下:
( y1 l+ d* X# V) ^9 G1 K9 L) V" _  v- s( x  G- d9 }
  1. //USART1_TX    PA.9 复用推挽输出// ) \1 E) l6 T$ J7 O) H, P
  2. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;              //PA.9// % a+ a" t+ F1 q1 f5 }  ]/ d" o
  3. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      //速率50MHz//; c& e- C) @% T6 o0 P7 b% }( P
  4. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出// & W1 `, W  R$ _! o; [: {' [& D
  5. GPIO_Init(GPIOA, &GPIO_InitStructure); 5 \( h) ^; q- ]5 V6 _
  6. //USART1_RX    PA.10 浮空输入/// g/ E5 C3 g- B8 A# i
  7. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;             //PA10// % A$ t9 b, S; l' u+ h6 P% l) g
  8. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //浮空输入// 4 ^3 T% \! B9 q9 `
  9. GPIO_Init(GPIOA,&GPIO_InitStructure);   
复制代码

$ M& g' `# r4 B' c( O. _3. 端口重映射概念  b( I, n. F, V  ~
每个内置外设都有若干个输入输出引脚,一般这些引脚的输出端口都是固定不变的,为了让设计工程师可以更好地安排引脚的走向和功能,在STM32中引入了外设引脚重映射的概念,即一个外设的引脚除了具有默认的端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的端口。  O/ G, C) q7 L7 Z' s0 x
为了使不同器件封装的外设IO功能数量达到最优,可以把一些复用功能重新映射到其他一些引脚上。STM32中有很多内置外设的输入输出引脚都具有重映射(remap)的功能。: Z7 U* _5 a- h0 g' ^! h; M/ e
因此重映射主要特点:1)方便PCB设计,减少信号交叉干扰;2)增加端口数目。, ~2 I: A! F" a( S# J+ B8 s
0 [( b, T6 ^0 _. a7 B& \  X% a
4. STM32F103x LQFP100管脚重映射
6 B$ L6 V: m$ y( i% b  A8 s0 G# p& k) s/ `
20200404174656183.png
) G9 G6 I1 s, F" k0 U: W! [; ]1 R' p5 C- {: ~
5. 查看《STM32F103ZET6》芯片手册

5 ^# Y4 a4 W+ Y% a, s, g仍以串口1为例,默认情况下,串口1 的发送接收引脚是PA9和PA10(观察右起第二栏),也可以USART1_TX 和 USART1_RX 重新映射到管脚 PB6 和 PB7 上面去(观察右起第一栏)。2 n% o( B# `7 d' t+ C

0 f1 n  N7 b+ a- M# c 20200404174810118.png
( ]( D$ g5 @- G# l+ P
+ R5 ~8 n  |& }9 y) S( O6. 部分重映射和完全重映射! X7 h5 f+ K% @6 W
部分重映射:功能外设的部分引脚重新映射,还有一部分引脚是原来的默认引脚;完全重映射:功能外设的所有引脚都重新映射。以串口3为例:
! w+ w) L7 V# ~; C6 f" l5 E$ H: O

2 R+ e  L' B$ l3 f! b4 d9 b2 J) p0 ^3 T2 B$ R: L
7. 端口重映射配置过程(以PB6,PB7配置为串口1为例)
& Y, t. d  E& ~9 E7.1 GPIO端口时钟使能(使能重映射后的端口时钟):
: ^! c) }% F" M+ m2 D7 q' k
7 G* q3 t% f( T3 i, [  g1 S2 j
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
复制代码
: k$ }+ q8 c8 x6 V! A0 E1 k8 L( Y
7.2 使能功能外设时钟(要将端口PB6,PB7复用为串口,因此要使能串口时钟):
" C& i) W$ N) a
0 o$ ^4 M# Y# W* \2 Z- z
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
复制代码
/ q: f, z7 E9 {
7.3 使能AFIO时钟(重映射必须使能AFIO时钟):$ G  l- Y( `5 B0 C
* w% P+ b9 v1 j. H8 N
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
复制代码
$ J- f3 [: ]6 [# J
7.4 开启重映射:
, p# W6 R( F2 g  l
) F/ r8 |* z5 e' y$ Q. N: N. r
  1. GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
    2 [( `: ^  j5 E, ]0 s
  2. //根据第一个参数,确定部分重映射还是全部重映射,在stm32f10x_gpio.h文件中定义了取值范围为下面宏定义的标识符://8 j5 h& m, c! Z( _
  3. //#define GPIO_PartialRemap_USART3    ((uint32_t)0x00140010);  //  
    : P+ a, E% S- o7 ~8 c
  4. //#define GPIO_FullRemap_USART3      ((uint32_t)0x00140030);   //
    4 k7 K$ B& {8 W4 {
  5. //若要使用 USART3 的部分重映射,调用函数方法为:                  //
    / h% S" D3 F+ e2 P, x
  6. //GPIO_PinRemapConfig(GPIO_PartialRemap_USART3,ENABLE);        //
复制代码

: A3 ~2 E  o- a) r" ]0 Z: e8. 哪些情况需要开启AFIO辅助功能时钟?- [8 ^  e% V" N
对寄存器AFIO_MAPR,AFIO_EXTICRX和AFIO_EVCR进行读写操作前,应当首先打开AFIO时钟:
& D7 `1 N5 c. T: V; l1) AFIO_MAPR:配置复用功能重映射;
; I: h5 i0 O! O/ ]# X! q5 U3 C2) AFIO_EXTICRX:配置外部中断线映射;; T! E7 q- \( o7 a3 w
3) AFIO_EVCR:配置EVENTOUT事件输出。
4 b" S) c6 _; [; _% z————————————————: T6 i! }. m$ R; W( N( }( H
版权声明:天亮继续睡
- f. \4 n% m- E* t1 G
2 {6 n2 ~9 ?; v" a1 u6 F0 y. j
0 X1 f7 v& l# Y; @
20200404174136436.png
收藏 评论0 发布时间:2022-11-21 17:00

举报

0个回答

所属标签

相似分享

官网相关资源

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