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

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

[复制链接]
STMCU小助手 发布时间:2022-11-21 17:00
主要内容:
' Q" x: K% a; w% W; \# [0 V1) 端口复用;
1 o" M. V8 X; ]! H2) 端口重映射。# |' \) ]7 S) P- }' ?! q6 D
+ Z' Z8 d3 R2 p% o' [8 T) ]
1. 端口复用概念
; f  F* ~1 f% r$ _+ Z' I, O$ gSTM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。' D. O" U- U: A, I  f$ }7 [! B4 T
例如串口1 的发送接收引脚是PA9和PA10,当我们把PA9和PA10不用作GPIO,而用做复用功能串口1的发送接收引脚的时候,叫端口复用。" i, o; [, y, s( {8 F! t
20200404174911935.png $ R. ?7 }! Y* u! @5 O

- o5 G4 G# _/ ]2 s2. 端口复用配置过程(以PA9,PA10配置为串口1为例)
: M* j$ F7 ^( ^) {! B, I2.1 GPIO端口时钟使能(使能端口时钟):
9 b* L( ?) R* R/ f; x
, q, [7 g/ [0 h' s$ v
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
复制代码

" ]) b& G# _" P0 o2.2 复用外设时钟使能(要将端口PA9,PA10复用为串口,因此要使能串口时钟):% G1 r& J- U% z8 R* T. k
- p& f+ F2 n, T7 g' I- ?0 |% x
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
复制代码
4 q2 Q& E8 L) _$ J- h6 R" K
2.3 端口模式配置(设置 GPIO 端口模式,查找《STM32中文参考手册V10》了解复用功能下如何设置GPIO);; W9 Z5 ~9 a" E) Z( w& _% p! r
3 v; O6 d, ?7 b& _! \
20200404174347967.png
; ?" U: p5 L5 X6 b) e  `5 R/ ~  \, c) y  N% F
2.4 由上表可知,要配置全双工的串口 1,USARTx_TX 管脚配置为推挽复用输出,USARTx_RX 管脚配置为浮空输入或带上拉输入,部分代码如下:9 v8 {$ v* W; S$ f( ~
% S0 v, k0 a8 R3 i
  1. //USART1_TX    PA.9 复用推挽输出// . ?  F# L' `  Z2 `( U. M: h. d
  2. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;              //PA.9//
    , E* b  ?: K1 b' M6 m) U
  3. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      //速率50MHz//
    % z5 v7 D4 @* L' k4 A( L! G
  4. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出//
    8 w  ?1 y2 ~7 G
  5. GPIO_Init(GPIOA, &GPIO_InitStructure);
    * ~1 J+ J. p0 N- Y! z8 r
  6. //USART1_RX    PA.10 浮空输入//. t5 z, C. y! k/ `& x1 t/ U. Z( G8 p
  7. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;             //PA10// & R) X* M; p: n; e1 `( `
  8. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //浮空输入//
    3 c7 ^5 F! [: p
  9. GPIO_Init(GPIOA,&GPIO_InitStructure);   
复制代码
' B2 ^+ G( O$ L
3. 端口重映射概念
) h% |3 [  O4 `, d每个内置外设都有若干个输入输出引脚,一般这些引脚的输出端口都是固定不变的,为了让设计工程师可以更好地安排引脚的走向和功能,在STM32中引入了外设引脚重映射的概念,即一个外设的引脚除了具有默认的端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的端口。- g! v3 @& u. I, U/ p
为了使不同器件封装的外设IO功能数量达到最优,可以把一些复用功能重新映射到其他一些引脚上。STM32中有很多内置外设的输入输出引脚都具有重映射(remap)的功能。
1 n( U' s. n6 P因此重映射主要特点:1)方便PCB设计,减少信号交叉干扰;2)增加端口数目。
# G4 m+ I% d1 w& l9 C/ c8 S  o9 T' C6 L+ U; ]# a; h
4. STM32F103x LQFP100管脚重映射  M0 r3 M7 r5 o& y& z

' {( q! Q9 e0 N5 L 20200404174656183.png - A/ ~5 ^) [( V
" W9 @) Q+ l0 P, W" x
5. 查看《STM32F103ZET6》芯片手册
; v* H3 ~1 E& u, x; L
仍以串口1为例,默认情况下,串口1 的发送接收引脚是PA9和PA10(观察右起第二栏),也可以USART1_TX 和 USART1_RX 重新映射到管脚 PB6 和 PB7 上面去(观察右起第一栏)。
1 V6 F$ D5 g/ G& C7 V  v
& p1 q7 j/ h# Y( W1 T! z 20200404174810118.png
& T/ F" R9 m* {7 G4 t, f- b" L3 A! M2 C
6. 部分重映射和完全重映射
+ r. U; U9 t! \部分重映射:功能外设的部分引脚重新映射,还有一部分引脚是原来的默认引脚;完全重映射:功能外设的所有引脚都重新映射。以串口3为例:7 c& V$ w6 |3 V3 N: X0 b" C7 N

1 x; O, Y1 O& d3 S8 V  O& }- t
9 [9 y7 s  h# Z7 V7 }! s& e" a$ y5 r; M* ~: X
7. 端口重映射配置过程(以PB6,PB7配置为串口1为例)
6 h! ~! B5 G( n4 j) l; V, s7.1 GPIO端口时钟使能(使能重映射后的端口时钟):
: s* m) t8 U+ R, w) y0 l2 U! A0 t8 r2 s* n' N. q
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
复制代码
' n1 T; t. e2 O8 |
7.2 使能功能外设时钟(要将端口PB6,PB7复用为串口,因此要使能串口时钟):( S4 g; Y. i/ p' ?7 A
4 x3 z: t* b6 j) a, e  s
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
复制代码

! s$ `3 O0 |; I' z% D/ t7.3 使能AFIO时钟(重映射必须使能AFIO时钟):
% t: a3 W9 |/ Q8 {$ b0 h5 O3 y
$ b7 a! N- e9 l5 X' k
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
复制代码
( y/ Z  [$ v3 d8 X& x; q6 ~5 b
7.4 开启重映射:
  p- P2 D7 \- y2 W  X% W& O7 s+ T. l) z8 n# k& k3 m4 V
  1. GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
    % k+ }7 m+ {3 J0 I
  2. //根据第一个参数,确定部分重映射还是全部重映射,在stm32f10x_gpio.h文件中定义了取值范围为下面宏定义的标识符://* k- Z  o4 q) J- @% q
  3. //#define GPIO_PartialRemap_USART3    ((uint32_t)0x00140010);  //  
    ; J. X2 v2 f( I
  4. //#define GPIO_FullRemap_USART3      ((uint32_t)0x00140030);   //
      k7 l. [7 ~" H9 t0 b
  5. //若要使用 USART3 的部分重映射,调用函数方法为:                  //
    . l" y% A- p$ F* i4 K8 T7 y2 c
  6. //GPIO_PinRemapConfig(GPIO_PartialRemap_USART3,ENABLE);        //
复制代码
; T2 Q1 m5 R: M: v
8. 哪些情况需要开启AFIO辅助功能时钟?
, }3 Y5 J" n: L6 ~对寄存器AFIO_MAPR,AFIO_EXTICRX和AFIO_EVCR进行读写操作前,应当首先打开AFIO时钟:
- D9 X+ j: U; M* u1) AFIO_MAPR:配置复用功能重映射;
3 T* _# l+ h- h/ ~0 h2) AFIO_EXTICRX:配置外部中断线映射;. X' o, U* I7 x7 H- v
3) AFIO_EVCR:配置EVENTOUT事件输出。
3 h& n# G7 h: i————————————————
: I- r8 p- I% ]# y, t$ _版权声明:天亮继续睡
! b7 D. j5 v$ x1 f9 x% P/ |5 b
  f- v  ]' I+ b! J- _4 N/ e0 f- I7 O' J1 P
20200404174136436.png
赞 收藏 评论0 发布时间:2022-11-21 17:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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