STM32笔记13--端口复用和重映射

参考资料:《STM32F1开发指南-库函数版本》 4.4小节,端口复用和重映射

或者《STM32中文参考手册》 第8章 通用和复用功能IO

13.1、端口复用

13.2、重映射(对STM32理解比较透彻的需要)

13.1、端口复用

什么是端口复用?

STM32有很多内置外设,这些外设的外部引脚都是与GPIO复用的,也就是说,一个GPIO如果可以既做普通的输入输出通信引脚,又做这些内部外设的通信引脚,那么这个GPIO就是在复用。

例如,PA9和PA10两个引脚,既是两个通用的IO口,又是串口1 的默认发送接收引脚(内置外设引脚)这两个引脚也就是端口复用。

补充:(1)什么是内置外设?

如果把单片机比做人,那么微处理器就相当于人脑,用于接收并发出信息(命令)那么一些最基本的功能,我们人体是可以自己实现的,实现这些功能的器官就相当于内置外设。换句话说,内置外设就是STM32用以实现最基本功能的设备。这些内置外设有:串口、ADC、DAC等。

至于某个引脚的具体复用功能是什么,可以查找《STM32中文数据手册》p17页开始的表格。

13.1.2、端口复用的配置过程

以PA9和PA10配置为串口一为例,具体步骤为

(1)使能GPIO口时钟

(2)使能复用外设的时钟

(3)端口模式配置,初始化IO口

        第(3)步,至于需要初始化为什么模式,或者配置为什么模式,需要参考中文数据手册第8.1.11、外设的GPIO配置;例如下表:

据表可知,要把USART串口配置为全双工模式,,则GPIO需要配置为推挽复用输出 

下面以代码的方式总结PA9,PA10复用为串口1的过程

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能IO口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);  //使能需要复用的外设时钟

//初始化IO口为对应的模式(查表可知)
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;  //配置PA9
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;  //输出速度
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;  //为复用推挽输出
GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;  //配置PA10
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;  //为浮空输入
GPIO_Init(GPIOA,&GPIO_InitStructure);

13.2、端口重映射,重映射(remap)

(1)什么是重映射?

STM32中每个外设都有若干输入输出引脚,一般这些引脚的输入输出口都是固定的,但为了能在设计工作中更好的安排引脚走向以及功能,引入了重映射的概念(remap)即一个外设的引脚除了具有默认的端口外,还可以通过配置重映射寄存器的方式,把这个外设的引脚映射到其他端口。

重映射就是引脚重映射,本来每个内置外设都有原来设定的引脚,所谓的重映射就是通过某种方式,将外设本来的引脚的功能赋予给另外的引脚(比如一个外设的引脚是PA10,但你的这个引脚正在被使用,你又想用这个外设,你就可以通过重映射,将PA11设定成PA10,也就是说PA11取代了PA10的功能,成为了外设的引脚),但是重映射也是有规定可以映射到哪个引脚的(需要查看手册)而不是你想映射到哪个引脚就映射到哪个引脚。

至于查看具体是怎么规定引脚重映射关系的,《STM32中文参考手册》p116,8.3复用功能和调试配置

(2)部分重映射和完全重映射

部分重映射:功能外设的部分引脚重新映射,还有一部分是原来的默认引脚

完全重映射:功能外设的所有引脚都重新映射。

以串口三为例:

(3)端口重映射过程

PS:

 

#define GPIO_Remap_SPI1             ((uint32_t)0x00000001)  
#define GPIO_Remap_I2C1             ((uint32_t)0x00000002)  
#define GPIO_Remap_USART1           ((uint32_t)0x00000004)  
#define GPIO_Remap_USART2           ((uint32_t)0x00000008)  
#define GPIO_PartialRemap_USART3    ((uint32_t)0x00140010)  //串口三部分重映射
#define GPIO_FullRemap_USART3       ((uint32_t)0x00140030)  //串口三完全重映射

 

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值