历史上的今天
返回首页

历史上的今天

今天是:2025年03月12日(星期三)

正在发生

2019年03月12日 | STM32之端口复用与重映射

2019-03-12 来源:eefocus

首先来说下什么是端口复用。


STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。


其实说白了,简单易懂的说,就是某些普通的外设引脚也可以用来其它功能。比如说那我使用的正点原子哥的板子来说吧,串口1 的发送接收引脚是PA9,PA10,当我们把PA9,PA10不用作普通的GPIO口,而用做复用功能串口1的发送接收引脚的时候,叫端口复用。


接下来说下端口复用的配置过程


首先,GPIO端口时钟使能。(这个不管用不用端口复用,要使用某个IO口必须要对时钟进行使能)


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);11


接下来就是你要使能复用外设时钟。(这里以串口1为例)


RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);1212


接下里就是端口模式配置。 GPIO_Init()函数。


  GPIO_InitTypeDef GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10  1234567891012345678910


这个可以参考(这里仅仅贴出了串口和定时器的端口配置模式)



以上就是端口复用的配置。

接下来说下什么是重映射。


每个内置外设都有若干个输入输出引脚,一般这些引脚的输出端口都是固定不变的,为了让设计工程师可以更好地安排引脚的走向和功能,在STM32中引入了外设引脚重映射的概念,即一个外设的引脚除了具有默认的端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的端口。


为了使不同器件封装的外设IO功能数量达到最优,可以把一些复用功能重新映射到其他一些引脚上。STM32中有很多内置外设的输入输出引脚都具有重映射(remap)的功能。


打个比方说,串口1的TX,RX引脚是在PA9,和PA10端口,但是同时它有两个映射端口PB6,PB7。开启重映射,PB6和PB7同样可以使用串口1。


详情可参考下表关于串口1和串口2的重映射表。


这里写图片描述


此外,还有有一个部分重映射,所谓部分重映射,顾名思义,就是有部分的端口进行了重映射。


比如time1(当做部分映射时,TIM1_BKIN为PA6引脚,而作为完全重映射是为PE15引脚而TIM1_ETR一直为PA12引脚)


这里写图片描述


接下来还是以串口1为例写下配置过程。


首先,使能GPIO时钟(注意:重映射后的IO);


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);11

接下来是使能功能外设时钟;


RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);11


然后是使能AFIO时钟:


RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);1212


这里注明下为什么要使能这个AFIO时钟。


对寄存器AFIO_MAPR,AFIO_EXTICRX和AFIO_EVCR进行读写操作前,应当首先打开AFIO时钟。


AFIO_MAPR:配置复用功能重映射 

AFIO_EXTICRX:配置外部中断线映射 

AFIO_EVCR: 配置EVENTOUT事件输出


最后要开启重映射:


GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);1212


之后只需要再次初始化GPIO端口即可。

以上也就是端口重映射的配置过程了。


推荐阅读

史海拾趣

EDSYN公司的发展小趣事

为了帮助客户更便捷地将设备连接到物联网,Econais与Xively展开了合作。通过这一合作,Econais的WiSmart Wi-Fi用户可以无缝连接到Xively云,为工业、商业和住宅市场带来了创新的医疗保健、智能能源、无线音频控制和监控产品。这种一站式的物联网解决方案大大加快了物联网产品的上市时间,同时也降低了产品的开发成本。

Datapro International Inc公司的发展小趣事

Datapro International Inc公司成立于20世纪90年代初,当时正值电子信息技术飞速发展的时期。公司的创始人是一群充满激情和创新精神的年轻工程师,他们看到了在数据存储和处理方面的巨大潜力。于是,他们决定成立Datapro International Inc公司,致力于开发高效、稳定的数据存储解决方案。

在创立初期,Datapro International Inc公司面临着重重困难,包括资金短缺、技术挑战和市场竞争等。然而,他们凭借坚定的信念和不懈的努力,成功开发出了第一款具有创新性的数据存储产品,该产品凭借其卓越的性能和稳定性迅速赢得了市场的认可。这一成功为Datapro International Inc公司的发展奠定了坚实的基础。

Electrocube Inc公司的发展小趣事

在稳固国内市场的同时,Electrocube Inc公司积极开拓国际市场。公司参加了多个国际电子展会,与全球知名电子企业建立了广泛的合作关系。通过不断的市场拓展,Electrocube Inc公司的产品已经远销欧美、亚洲等多个国家和地区,实现了跨越式的发展。

GE Power Electronics Inc公司的发展小趣事
选用质量可靠、性能稳定的元件,如高精度电位器、低噪声放大器等。
American Micro Products Inc公司的发展小趣事

AMP自创立之初,就专注于微电子产品的研发与生产。在一次技术攻关中,公司的研发团队成功开发出一款具有高性能、低功耗特点的微型芯片,这一创新产品迅速在市场上获得了广泛认可。随着技术的不断迭代,AMP持续推出了一系列具有竞争力的电子产品,逐渐在行业中建立了自己的地位。

Cotco公司的发展小趣事

为了提升竞争力,Cotco公司高度重视技术创新和产品研发。公司投入大量资金建立了先进的研发中心,吸引了一批顶尖的电子工程师和研发人员。通过不断的技术攻关和市场调研,Cotco成功开发出一系列具有自主知识产权的电子产品,包括高性能的电源适配器、稳定可靠的数据线等。这些产品凭借卓越的性能和合理的价格,迅速在市场上占据了一席之地。

问答坊 | AI 解惑

电子基础知识--变压器工作原理

变压器是变换交流电压、电流和阻抗的器件,当初级线圈中通有交流电流时,铁芯(或磁芯)中便产生交流磁通,使次级线圈中感应出电压(或电流)。变压器由铁芯(或磁芯)和线圈组成,线圈有两个或两个以上的绕组,其中接电源的绕组叫初级线圈,其余的 ...…

查看全部问答>

ST和Luminary的小小交锋

一个有趣的帖子——ST和LM的对决 http://www.luminarymicro.com/component/option,com_joomlaboard/Itemid,92/func,view/id,6551/catid,5/ 虽说都是M3的核搞产品开发多余50%的代码与外设相关, 已经作了ST的用户就基本吊在这棵树上了。其实我也希 ...…

查看全部问答>

汽车电子硬件工程师的成长

了解美国的硬件工程师的成长是一件有趣的事情,不过残酷的是,在中国是不可复制的。 一般美国的工程师的技术上分级一般,有5级 Entry Level 1 Hardware Engineer 最初级硬件工程师 一般是刚进公司的毕业生,主要的工作是打杂和学习公司开发流程 ...…

查看全部问答>

"UI相关"的准确定义

wince6的驱动中要求不能有任何UI相关的操作. 此处\"UI相关\"的准确定义是什么? 是所有与GWES相关的操作吗?…

查看全部问答>

我毕业设计要做太赫兹通信系统,有个问题请各位高人帮帮忙!

太赫兹通信系统中,发射极要把2GHz的信号变频到500GHz,接收机又要把500GHz下变频到2GHz 。 但是老师说:没有这么高频率的混频器,叫我另外想办法。 想不出来,急啊! 请求各位帮助,万分感谢!!…

查看全部问答>

【征询贴】OLED模块

1、团购备案号:002 2、团品介绍:                     OLED显示自发光,无需背光源,无论白天夜晚显示明亮锐利!效果远超液晶显示。 全屏点亮 ...…

查看全部问答>

【求助】ad421怎么使用??

AD421在配合430单片机使用时,接3.3V电压,现在不明白的问题是调整管DN25D和LOOPRIN之间还需要接电压吗?应该接多大?这点应该怎么处理?谢谢大家!!…

查看全部问答>

求Vxworks操作系统下的会编写打印机驱动程序的高手!

求Vxworks操作系统下的会编写打印机程序的高手! 最好是南京的,费用面议! 联系QQ:458657918…

查看全部问答>

17XX将功耗

CM3的PLL工作在100M确实很费电啊,有没有新招可以让它从新设置PLL把PCLK降下来,在整个的工作过程中我需要PLL不断的再高频和低种切换,不知道有没有办法让PLL重新设置,而不丢失RAM中的数据。看资料好像说是掉电模式可以的,但是掉电会不会让RAM中 ...…

查看全部问答>