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

【经验分享】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. /*****************************************************************************
    7 Z. Z8 n1 [  ]( y  g- L

  2. ' K" J/ {* j0 P: B- ?
  3. //函数名:void Uart1_Init(void)
    . a. y8 f4 C. k- H

  4. 2 ?/ }- I9 s6 K: Z% I/ C" X
  5. //功能:串口(USART1)重映射初始化配置函数,由TX PA9~PB6    RX PA10~~PB7, X5 Y" z! f  P. _6 a3 n

  6. ! \/ z6 M( R: E* E- t7 u( a% H
  7. *****************************************************************************/7 {8 Z$ p/ M% @1 I; |4 X1 `

  8. ( Q, p0 R$ o( @' j* c$ W$ n
  9. void Uart1_Init(void)
    - B5 m7 c& @6 {0 ^9 m- m
  10. / o- m. z1 W& c7 W8 `
  11. {
    % I0 V+ Q& t! F1 q3 P. L

  12. 8 h6 g& J# r" h5 X- c) r
  13.    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |. B9 Y- @! z  J3 S
  14.    RCC_APB2Periph_AFIO,ENABLE);//开启端口B和复用功能时钟
    # M4 b& l' s6 D
  15.    GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);//使能端口重映射- Y$ @7 W) h  w. b) A0 [: B2 D
  16.    GPIO_InitTypeDef GPIO_InitStructure;
    4 S4 d. V; X, j. w/ s4 B
  17. , |! `/ Q$ `* C) ~: M
  18.    //uart 的GPIO重映射管脚初始化 PB6 usart1_TX PB7 USART_RX
    7 ^9 W$ V# L1 R% y2 b
  19. ! k" C1 l' W7 y) ?* g4 u
  20.    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;4 @; @( u. h* Z7 Q0 E  J6 O& V
  21.    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//推挽输出7 o5 ^6 H- G- p$ P. n. a9 }9 w/ ]
  22.    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    ) i  p# L( f( b( y6 I
  23.    GPIO_Init(GPIOB,&GPIO_InitStructure);% u0 `7 v: c: W  F" |2 Z3 X

  24. " y8 W& Y% z- D
  25.    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;( y( o+ f  J; V6 D' E5 ~; K
  26.    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//悬空输入; D5 R  C7 Q2 @) ~
  27.    GPIO_Init(GPIOB,&GPIO_InitStructure);
    $ I0 X7 m+ h' U" m( H+ Q- f* G
  28. ' E: @# E$ q; T3 z
  29.    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
    / r. G8 d$ a- o1 ^% x; B( Q4 L
  30.    USART_InitTypeDef USART_InitStructure;
    8 A* v" b. ]) b4 Q( T) X5 z
  31.    //串口参数配置:9600,8,1,无奇偶校验,无硬流量控制 ,使能发送和接收; P8 m* V; ~5 x8 H/ C" Q% l; v* o
  32. ) s& ?7 ]+ f9 e( Z
  33.    USART_InitStructure.USART_BaudRate = 9600;
    & p+ ~/ A% q7 t  \1 U9 f1 G* L$ G
  34.    USART_InitStructure.USART_WordLength = USART_WordLength_8b;' _. j' M* ^! {, }0 t. E
  35.    USART_InitStructure.USART_StopBits = USART_StopBits_1;) N0 q2 m0 `) M$ |$ }
  36.    USART_InitStructure.USART_Parity = USART_Parity_No ;. Z% o8 d& x% i; }7 q/ K! a& F
  37.    USART_InitStructure.USART_HardwareFlowControl =
    3 {  p# {$ K7 j5 J0 ^$ n/ ^
  38.    USART_HardwareFlowControl_None;% R( Y  W4 i7 s
  39.    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;1 ~# J+ v" p! U& O
  40.    USART_Init(USART1, &USART_InitStructure);6 F2 l' Z) A, q, O
  41.    USART_ITConfig(USART1, USART_IT_RXNE,ENABLE);//串口接收中断) v6 Q1 s8 x) U9 h3 U& x- T) {. l
  42.    USART_Cmd(USART1, ENABLE);
    & b7 d5 [7 D3 x
  43. }6 P& }2 |9 n+ J1 e. j6 d; h
复制代码
+ n; h& u' [3 R& e4 ?9 b3 Y% g
简要分析重映射步骤为:
1.打开重映射时钟和USART重映射后的I/O口引脚时钟,
  1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  |RC C_APB2Periph_AFIO,ENABLE);
复制代码
; h3 L2 s& s( F& i- a; u  _
2.I/O口重映射开启.
  1. GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
复制代码

* y2 h! T( _& v
3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.
  1. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    , f% u1 ?0 C, q, \, u" x" M  s
  2. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;5 ^' Z+ W9 d! ^' C8 ]# ^  ^. y2 j+ k
  3. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;3 o- `! m" i% k
  4. GPIO_Init(GPIOB, &GPIO_InitStructure);<br>, u- d7 y$ q6 _, j- h& X( }
  5. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
    % y! p# [* a" N$ U+ v  W  `/ t+ n
  6. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    ! z! \  w- l6 b/ q, c/ _! k5 I1 e
  7. GPIO_Init(GPIOB, &GPIO_InitStructure);  
复制代码
8 W! e1 B; `9 j, l' z4 R
只需要简单的以上三步就能轻松搞定。
4 n7 }) K3 F) @/ Z6 u+ _$ p
收藏 评论0 发布时间:2022-1-31 16:00

举报

0个回答

所属标签

相似分享

官网相关资源

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