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

【经验分享】STM32 ~ UART 重映射

[复制链接]
STMCU小助手 发布时间:2022-1-31 16:00
在进行原理图设计的时候发现管脚的分配之间有冲突,需要对管脚进行重映射,在手册中了解到STM32 上有很多I/O口,也有很多的内置外设像:I2C,ADC,ISP,USART等 ,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的 I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。
第一次这么干感觉心里没底,所以针对USART1在STM32F103RBT6的板子上实现了一把,以下是相关的测试代码:
  1. /*****************************************************************************
    + }( w% g0 q& o( G. C7 A9 k- m( X
  2. 2 m8 m5 s5 y7 O3 s. R  B
  3. //函数名:void Uart1_Init(void)4 b4 f0 G# x: l0 ]( m6 l* i+ M/ ]2 B

  4. 0 Y6 R0 k& j5 Q5 U, `  W: k0 n7 s. k
  5. //功能:串口(USART1)重映射初始化配置函数,由TX PA9~PB6    RX PA10~~PB7
    , d7 v2 D! H, W$ E+ D4 w
  6. ! X7 D+ Z0 P8 L! _3 i
  7. *****************************************************************************/2 B3 F3 P! W  b8 Z, p8 n$ p1 ]

  8. 9 V6 q. j' s0 ?
  9. void Uart1_Init(void)
    5 g2 J4 g" x+ y0 J9 q" u
  10. 9 g, v: z2 o2 ^, z& h
  11. {0 D. v3 E8 S: I) g& |
  12. 5 {# S3 I/ q- |7 b- f
  13.    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |5 \8 y3 [* k+ l& u
  14.    RCC_APB2Periph_AFIO,ENABLE);//开启端口B和复用功能时钟, o/ C" s: d6 L% m5 E4 L2 R
  15.    GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);//使能端口重映射, E* ]( @. x9 p
  16.    GPIO_InitTypeDef GPIO_InitStructure;
    6 L$ f* m1 C( k" e: f+ p/ Q
  17. - G9 l9 D: ?; P- T6 F5 [
  18.    //uart 的GPIO重映射管脚初始化 PB6 usart1_TX PB7 USART_RX
    . s1 K& n& g2 p, y1 Q  o: ]
  19. + S$ Y* w! h/ F+ H
  20.    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;! A2 A2 C4 V' A7 [
  21.    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//推挽输出/ Y( Y5 e4 C* C2 z0 G8 _* @- M
  22.    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;# }% _' M  s5 E3 s9 \: t- y
  23.    GPIO_Init(GPIOB,&GPIO_InitStructure);$ B3 _; E+ D& w5 ^+ A

  24. $ O: G1 F  K, [/ S8 y# h" t  A
  25.    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;4 F" }4 R8 Y$ e% y" K& J
  26.    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//悬空输入
    * ^, C6 m' b% O' m
  27.    GPIO_Init(GPIOB,&GPIO_InitStructure);
    * D7 ?' ^' }+ r# F* ~. Z

  28. 5 H' J0 H9 q5 q9 l* S) B6 M
  29.    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
    . F3 X; d6 X: @+ Y+ B- o9 x' j8 k6 q3 i
  30.    USART_InitTypeDef USART_InitStructure;3 P: L1 q# C% P! }2 x
  31.    //串口参数配置:9600,8,1,无奇偶校验,无硬流量控制 ,使能发送和接收
    - }: |9 y9 j3 p
  32. ( g8 f- d1 }2 n  b  \/ C" g' h" u+ Z
  33.    USART_InitStructure.USART_BaudRate = 9600;
      a+ s4 a0 m% o5 R" y! G" j) J
  34.    USART_InitStructure.USART_WordLength = USART_WordLength_8b;& |' M7 Y+ c/ f" ~. X
  35.    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    " c! A% j0 k& g( H4 ?
  36.    USART_InitStructure.USART_Parity = USART_Parity_No ;/ K  w% C+ ]' a+ ?1 R- c
  37.    USART_InitStructure.USART_HardwareFlowControl =
    $ O" ]; ~+ ]6 y0 A! W2 Y
  38.    USART_HardwareFlowControl_None;9 `9 I9 I: d; N% Q5 _5 u: W
  39.    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    ' a7 v6 i" t* t- R  r
  40.    USART_Init(USART1, &USART_InitStructure);
    9 T, P% ?8 |0 d: C( |9 a
  41.    USART_ITConfig(USART1, USART_IT_RXNE,ENABLE);//串口接收中断; X" U$ i& P/ P8 D+ S# K! D; x* b
  42.    USART_Cmd(USART1, ENABLE);
    : e  h8 ]( q# N6 k8 M0 @( b
  43. }
    ; |0 A6 ?  ~$ |+ |/ T( E1 O
复制代码

( O6 `5 v8 b) M: E2 v" `6 e' Y$ Y
简要分析重映射步骤为:
1.打开重映射时钟和USART重映射后的I/O口引脚时钟,
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  |RC C_APB2Periph_AFIO,ENABLE);
复制代码
, p- L  ^3 ?3 `& |' F
2.I/O口重映射开启.
  1. GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
复制代码
4 l! I0 r! ~" Y3 Y$ J$ ~4 n. X8 R
3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.
  1. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    * o; f" I$ d$ i3 F$ o6 u
  2. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;. w1 Z+ k; {& {- R
  3. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    & H/ ]! }) i% k( d- e5 P
  4. GPIO_Init(GPIOB, &GPIO_InitStructure);<br>
    2 F4 f) y* H  C1 i
  5. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    # R# L: [% |5 t
  6. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/ x( B4 x2 E, z2 J
  7. GPIO_Init(GPIOB, &GPIO_InitStructure);  
复制代码
0 Q: |8 q. h6 ~; ^- l
只需要简单的以上三步就能轻松搞定。

: W0 z! t& [/ a3 j3 y3 j( f
赞 收藏 评论0 发布时间:2022-1-31 16:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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