历史上的今天

今天是:2024年10月20日(星期日)

正在发生

2021年10月20日 | stm32专题八:端口复用及重映射

发布者:LuckyDaisy 来源: eefocus关键字:stm32  端口复用  重映射 手机看文章 扫描二维码
随时随地手机看文章

stm32有很多的外设,这些外设的引脚都是与GPIO引脚复用的。也就是说,一个GPIO,既可以当作普通的IO口(此时按照通用配置),也可以配置为外设引脚(此时配置为复用输出/输入),如串口USART,IIC,之前提到的MCO系统时钟监测引脚等,接下来专门介绍端口复用和重映射。


在stm32中文参考手册的第8章,有专门提到端口复用的章节如下

以下是关于复用功能的描述:

根据描述我们知道,在使用复用功能前,我们需要先配置对应的GPIO。具体配置的结构框图,也在“复用功能配置”中有说明。注意,在复用开漏模式下,读输入数据寄存器IDR可以得到IO口的状态,很明显,这在软件模拟IIC时,获得应答信号ACK非常有用。那么外设的GPIO具体应该怎么配置复用功能呢?在参考手册P110  8.1.11节有详细说明,所有外设的复用都能在这里查到。

比如,当我们需要使用USART1时,按照上述复用功能的描述,首先需要开启GPIO的时钟,然后要开启USART1的时钟,然后按照上表来对相应的GPIO引脚进行配置。USART1_TX的默认引脚为PA9,则PA9要配置为推挽复用输出,RX引脚为PA10,按上表应配置为浮空输入,代码如下:


// 使能GPIOA的时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

// 使能USART1串口1的时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

 

// 将USART Tx的GPIO配置为推挽复用模式PA9

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

 

// 将USART Rx的GPIO配置为浮空输入模式PA10

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, &GPIO_InitStructure);

所以,我们在使用复用功能的是时候,最少要使能 2 个时钟:


GPIO 时钟使能

复用的外设时钟使能

同时要初始化 GPIO 以及复用外设功能

以上时端口复用的内容。


重映射


为了使不同器件封装的外设 IO 功能数量达到最优,可以把一些复用功能重新映射到其他一些引脚上。STM32 中有很多内置外设的输入输出引脚都具有重映射(remap)的功能。我们知道每个内置外设都有若干个输入输出引脚,一般这些引脚的输出端口都是固定不变的,为了让设计工程师可以更好地安排引脚的走向和功能,在 STM32 中引入了外设引脚重映射的概念,即一个外设的引脚除了具有默认的端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的端口。


关于重映射的描述:

OSC32_IN和OSC32_OUT实际上就是连接外部低速晶振LSE(优先为LSE),也可以重映射为通用的GPIO口(PC14 PC15)。同理,OSC_IN和OSC_OUT连接HSE,可以重映射到PD0 PD1。

如串口USART1,下图所示。可以看到,REMAP=0(未开启重映射)即默认复用引脚为PA9 PA10,而当开启了重映射之后,TX和RX被重映射到PB6和PB7。重映射还有部分重映射(改变其中一些引脚分配)和完全重映射(改变所有引脚分配)。

重映射实际上操作的是AFIO_MAPR寄存器,具体如下:

可以看到,其中包含了JTAG-SWD,ADC,TIM,USART,IIC,SPI等外设的重映射。操作起来也很简单,只需要对相应的位置1,就完成了重映射,比如USART1

因此,重映射的过程分为:


使能GPIO端口时钟;

使能外设的时钟;

使能AFIO的时钟(AFIO也是一个外设);

开启重映射,调用库函数GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);

GOIO重映射的函数GPIO_PinRemapConfig包含在stm32f10x_gpio.h中,我们可以很方便的实现重映射,其源码如下。可以看到,其实就是往MAPR中相应的位写1。


/**

  * @brief  Enables or disables the Event Output.

  * @param  NewState: new state of the Event output.

  *   This parameter can be: ENABLE or DISABLE.

  * @retval None

  */

void GPIO_EventOutputCmd(FunctionalState NewState)

{

  /* Check the parameters */

  assert_param(IS_FUNCTIONAL_STATE(NewState));

  

  *(__IO uint32_t *) EVCR_EVOE_BB = (uint32_t)NewState;

}

 

/**

  * @brief  Changes the mapping of the specified pin.

  * @param  GPIO_Remap: selects the pin to remap.

  *   This parameter can be one of the following values:

  *     @arg GPIO_Remap_SPI1             : SPI1 Alternate Function mapping

  *     @arg GPIO_Remap_I2C1             : I2C1 Alternate Function mapping

  *     @arg GPIO_Remap_USART1           : USART1 Alternate Function mapping

  *     @arg GPIO_Remap_USART2           : USART2 Alternate Function mapping

  *     @arg GPIO_PartialRemap_USART3    : USART3 Partial Alternate Function mapping

  *     @arg GPIO_FullRemap_USART3       : USART3 Full Alternate Function mapping

  *     @arg GPIO_PartialRemap_TIM1      : TIM1 Partial Alternate Function mapping

  *     @arg GPIO_FullRemap_TIM1         : TIM1 Full Alternate Function mapping

  *     @arg GPIO_PartialRemap1_TIM2     : TIM2 Partial1 Alternate Function mapping

  *     @arg GPIO_PartialRemap2_TIM2     : TIM2 Partial2 Alternate Function mapping

  *     @arg GPIO_FullRemap_TIM2         : TIM2 Full Alternate Function mapping

  *     @arg GPIO_PartialRemap_TIM3      : TIM3 Partial Alternate Function mapping

  *     @arg GPIO_FullRemap_TIM3         : TIM3 Full Alternate Function mapping

  *     @arg GPIO_Remap_TIM4             : TIM4 Alternate Function mapping

  *     @arg GPIO_Remap1_CAN1            : CAN1 Alternate Function mapping

  *     @arg GPIO_Remap2_CAN1            : CAN1 Alternate Function mapping

  *     @arg GPIO_Remap_PD01             : PD01 Alternate Function mapping

  *     @arg GPIO_Remap_TIM5CH4_LSI      : LSI connected to TIM5 Channel4 input capture for calibration

  *     @arg GPIO_Remap_ADC1_ETRGINJ     : ADC1 External Trigger Injected Conversion remapping

  *     @arg GPIO_Remap_ADC1_ETRGREG     : ADC1 External Trigger Regular Conversion remapping

  *     @arg GPIO_Remap_ADC2_ETRGINJ     : ADC2 External Trigger Injected Conversion remapping

  *     @arg GPIO_Remap_ADC2_ETRGREG     : ADC2 External Trigger Regular Conversion remapping

  *     @arg GPIO_Remap_ETH              : Ethernet remapping (only for Connectivity line devices)

  *     @arg GPIO_Remap_CAN2             : CAN2 remapping (only for Connectivity line devices)

  *     @arg GPIO_Remap_SWJ_NoJTRST      : Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST

  *     @arg GPIO_Remap_SWJ_JTAGDisable  : JTAG-DP Disabled and SW-DP Enabled

  *     @arg GPIO_Remap_SWJ_Disable      : Full SWJ Disabled (JTAG-DP + SW-DP)

  *     @arg GPIO_Remap_SPI3             : SPI3/I2S3 Alternate Function mapping (only for Connectivity line devices)

  *                                        When the SPI3/I2S3 is remapped using this function, the SWJ is configured

  *                                        to Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST.   

  *     @arg GPIO_Remap_TIM2ITR1_PTP_SOF : Ethernet PTP output or USB OTG SOF (Start of Frame) connected

  *                                        to TIM2 Internal Trigger 1 for calibration (only for Connectivity line devices)

  *                                        If the GPIO_Remap_TIM2ITR1_PTP_SOF is enabled the TIM2 ITR1 is connected to 

  *                                        Ethernet PTP output. When Reset TIM2 ITR1 is connected to USB OTG SOF output.    

  *     @arg GPIO_Remap_PTP_PPS          : Ethernet MAC PPS_PTS output on PB05 (only for Connectivity line devices)

  *     @arg GPIO_Remap_TIM15            : TIM15 Alternate Function mapping (only for Value line devices)

  *     @arg GPIO_Remap_TIM16            : TIM16 Alternate Function mapping (only for Value line devices)

  *     @arg GPIO_Remap_TIM17            : TIM17 Alternate Function mapping (only for Value line devices)

  *     @arg GPIO_Remap_CEC              : CEC Alternate Function mapping (only for Value line devices)

  *     @arg GPIO_Remap_TIM1_DMA         : TIM1 DMA requests mapping (only for Value line devices)

  *     @arg GPIO_Remap_TIM9             : TIM9 Alternate Function mapping (only for XL-density devices)

  *     @arg GPIO_Remap_TIM10            : TIM10 Alternate Function mapping (only for XL-density devices)

  *     @arg GPIO_Remap_TIM11            : TIM11 Alternate Function mapping (only for XL-density devices)

  *     @arg GPIO_Remap_TIM13            : TIM13 Alternate Function mapping (only for High density Value line and XL-density devices)

  *     @arg GPIO_Remap_TIM14            : TIM14 Alternate Function mapping (only for High density Value line and XL-density devices)

  *     @arg GPIO_Remap_FSMC_NADV        : FSMC_NADV Alternate Function mapping (only for High density Value line and XL-density devices)

  *     @arg GPIO_Remap_TIM67_DAC_DMA    : TIM6/TIM7 and DAC DMA requests remapping (only for High density Value line devices)

  *     @arg GPIO_Remap_TIM12            : TIM12 Alternate Function mapping (only for High density Value line devices)

  *     @arg GPIO_Remap_MISC             : Miscellaneous Remap (DMA2 Channel5 Position and DAC Trigger remapping, 

  *                                        only for High density Value line devices)     

[1] [2]
关键字:stm32  端口复用  重映射 引用地址:stm32专题八:端口复用及重映射

上一篇:stm32专题七:EXTI(二) 外部中断
下一篇:stm32专题九:SysTick(二)微妙和毫秒级延时

推荐阅读

        集微网消息(文/Lee),10月19日,紫光集团旗下三家上市公司紫光股份、紫光国微、紫光学大宣布,公司股票于2018年10月19日开市起临时停牌,待公司通过指定媒体披露相关公告后复牌。        今日午间,三家公司分别发布公告称,停牌系因实控人清华控股正在筹划对尚在进行中的紫光集团部分股权转让方案做出重大调整。预计停牌时间自...
据消息,新西兰克赖斯特彻奇国际机场引进了从日本机器人16日上岗,为游客提供互动服务。同事,克赖斯特彻奇国际机场也是新西兰第一个引入机器人的机场。 据悉,这款机器人名为Pepper,由日本软银机器人公司开发,近年来已经销往多个国家。它身高120厘米,大眼圆脸,可识别人脸部表情,响应胸部触摸屏上的输入指令,并进行对话。它不仅可以给人指路,还...
如今,通过数据中心和网络传输的数据量正以每年25%的速度增长1,并且丝毫没有放缓的迹象。要想高效地传输、存储和处理这些数据,就需要高度优化、高带宽、低延迟的连接解决方案。 我经常与客户谈起他们对网络日益增长的需求,我们的讨论总是会集中在以下三个方面: 在数据传输增加的情况下保持网络性能。能够灵活适应客户的动态网络需求。 提高可见性和控制...
SK海力士宣布业界首次成功开发现有最佳规格的HBM3 DRAM。 HBM3是第四代HBM(High Bandwidth Memory)技术*,由多个垂直连接的DRAM芯片组合而成,是一种高价值产品,创新性地提高了数据处理速度。SK海力士去年7月在业界首次开始批量生产HBM2E* DRAM后,时隔仅1年零3个月开发了HBM3,巩固了该市场的主导权。SK海力士强调,“通过此次HBM3,不仅实现了目前...

史海拾趣

问答坊 | AI 解惑

QFN封装怎么用排针引出来呢

各位大哥,请问有没有什么器件产品可以把QFN48的封装用排针引出来的,多谢了!…

查看全部问答∨

LED室内照明的五大注意要点

replyreload += \',\' + 373249; LED照明作为正在应用初期的,广泛的用在各种室内照明方案上面还比较困难,主要是因为一方面是LED室内照明的产品种类太少,照明设计人员苦于无从选择,而给室内照明产品的推广设置了障碍。另一方面是LED室内照 ...…

查看全部问答∨

有谁需要c8051f系列单片机的?

我司重点推广c8051f系列单片机 c8051f330/c8051f120/仿真器部分参考报价 c8051f330 9元/片 c8051f330st 125元/套 原装EC3 390元/套(配套下载线+光盘+运费) c8051f单片机仿真器 90元/套(配套下载线+光盘+运费) c8051f120 55元/片 c8051f ...…

查看全部问答∨

关于Win CE中的文件传输问题

请问各位高手,我想把WinCE系统中的文件传到其他的PC机(服务器)上,请问怎么实现?…

查看全部问答∨

如何实现 系统设计中不同IP CORE 时钟同步?

如何实现 系统设计中不同IP CORE 时钟同步?   在片上系统设计中,调用不同IP CORE ,由于不同IP CORE 对时钟要求不同,怎样才能使这些IP CORE 时钟全同步?…

查看全部问答∨

教你制作LED超高亮迷你台灯

超高亮LED迷你台灯具有零辐射、零污染、零频闪、光照均匀、亮度稳定、低光衰、更接近自然光等特点,超高亮LED是一种有着广阔发展前景的节能光源。电路工作原理迷你小台灯电路如图1所示。图中VD1为防充电反接二极管,即在外接充电器电压极性接反时, ...…

查看全部问答∨

2012LED照明产业发展状况分析

  LED产业自兴起以来在节能、高效、长寿命等一系列光环的笼罩下,产业的发展一直被寄予厚望,但中国的LED产业起步较晚,长时间的“零门槛儿”准入原则,使其本身具备“行业乱、产品杂、企业难“等特点,行业整体呈现出“高不成低不就”的状况。而 ...…

查看全部问答∨

求助关于Using the USCI I2C Master的使用方法?

最近打算使用MSP430的i2c驱动MPU6050. 我更改了TI_USCI_I2C_master.h头文件中的一些定义: #define SDA_PIN 0x80                             ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved