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

【经验分享】STM32 端口复用&重映射(USART Remap)

[复制链接]
STMCU小助手 发布时间:2022-1-14 23:00
下面跟大家说一下STM32单片机的端口重映射,因为是以自己为实例.这里是以USART1的重映射为例..
        因为我要一个TFT_LCD屏的主控板,考虑到FSMC 我选用了STM32F103VCT6 型号的CPU,一不小心串口接到USART1上了.因为在调程序时才发现错了,没得办法,只能通过端口重映射来解决.但是以前没用过端口重映射,只闻其名,未用其身,所以..呵呵 ...只能从头去看了.
         STM32上有很多I/O口,也有很多的内置外设想I2C,ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的.读到这里相信大家都应该了解了端口重映射的一些概念了.原理上的东西不细说了,大家可以看手册或者网上查,这方面的资料还是很多的.下面说说我的调试经历.
        不知道是什么原因 PCB制图时把串口接到USART1上了,当时也没在意,等我把USART测试程序写好烧进去硬件仿真时,串口给的是乱码,我当时就觉得奇怪.把程序检查了好几遍就是查不出问题来,以为是硬件有问题,但突然想到了STM有复用功能,心想会不会是这里有鬼?于是找来datasheet 一看 ,真相大白

& g& l' V# g5 Q, N0 `8 u

$ W( E! S- z2 s
三个红框交汇处.STM32F103VCT6 这个CPU的USART1接的是PB6/PB7 但是上电初始化后默认功能并非是USART1.所以想要用串口功能 .必须用端口重映射..
   大家知道,STM32的单片机每个功能模块有自己的时钟系统,所以要想要调用STM32单片机的功能模块时 必须先配置对应时钟,然后才能去操作相应的功能模块.端口重映射也一样.如图示:9 z2 m4 T* r! ]& S" c

2 h  X$ Z" m. Z: H
重映射步骤为:
1.打开重映射时钟和USART重映射后的I/O口引脚时钟,
  1.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
复制代码
; R7 |: @: G7 ], K/ f7 F
2.I/O口重映射开启.
  1.                    GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
复制代码

$ e- `3 P, A/ t$ G# _7 j/ q
3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.
  1. <div align="left"><font face="Tahoma"><font size="2"><font color="#000000">                             GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    2 |+ o4 B: q5 e  w* N6 X* Y2 d
  2.                              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    4 Y- X8 u2 A" T, |+ U
  3.                              GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;( f& D' f! s8 d8 g* S
  4.                              GPIO_Init(GPIOB, &GPIO_InitStructure);</font></font></font></div><div align="left"><font face="Tahoma"><font size="2"><font color="#000000">3 `+ l; l5 {9 c! I- ^2 L6 v$ K$ N( ~
  5.                               GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;0 ?9 X% A' {) l" v. i9 S' F( c, S
  6.                               GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    8 [4 x% O) p: o" E
  7.                                GPIO_Init(GPIOB,&GPIO_InitStructure);</font></font></font></div>
复制代码

0 c# w( v7 i8 d" w) U  [( j9 ^+ ^
      只需要这三步,串口就可以正常使用了,简单吧?  但是我纠结了大半个小时才搞定的,好多事情都是说起来容易做起来难的,希望我以后多多进步.不要眼高手低,嗯我正朝这个方向前进.2 ?5 P, C% f7 S8 S

0 D' j# _; U( |3 M4 A/ L
: [# ]" G# K% e, {2 D# E& m* Z; H% ~7 q9 t* O# |
最后总结一下:5 O7 n6 r  m3 q# c9 A! c+ m
+ l, \  E! J. H/ a' D, O
简单的说 STM32的 io 有3个功能一个是默认的 一个是复用 一个是重映射功能(这个其实也属于复用)
  o: `5 b* G# G% h/ M
* U) Y3 q/ }; S2 [如果配置成复用 则将使用第2个功能 如果配置成复用 同时 相应的重映射配置了 则将使用第3个功能
" j' g0 M& |' G4 v6 c; {& X- T" C8 Q& G- d
通常一个口的 复用+重映射有好多 不止两个 这时候就看你使能哪个设备了(哪个被使能就用哪个) 3 H3 S" h  s9 c: P  t: [0 y

$ g& H* {4 z. I/ J6 |' |8 x开复用 + 使能设备+ 是否重映射就可以决定这个io口到底使用哪个功能

! y$ B* e0 o9 {  w+ D5 r
赞 收藏 评论0 发布时间:2022-1-14 23:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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