STM32单片机端口复用和端口重映射

STM32单片机端口复用和端口重映射

STM32单片机上有很多I/O口,也有很多的内置外设,比如I2C、ADC、DAC、USART等都属于内置外设。这些内置外设基本都是与I/O口共用管脚的,也就是I/O管脚的复用功能。
除了I/O管脚的复用功能外,很多复用内置的外设的I/O引脚可以通过重映射功能,即从不同的管脚引出,即复用功能的引脚和重映射的引脚是可通过软件配置改变的。

下面以STM32F103VCT6芯片上的USART1为例

首先先看芯片STM32F103VCT6上关于USART1的引脚相关资料

  1. USART1功能复用引脚分布图
    在这里插入图片描述
    由上图可知:PA9管脚可复用为USART1_TX,PA10管脚可复用为USART1_RX。
  2. USART1功能重映射引脚分布图
    在这里插入图片描述
    由上图可知:PB6作为USART1_TX的重映射管脚,PB7作为USART1_RX的重映射管脚
  • 在这里补充一下官方STM32F103VCT6芯片资料建议的对串口模式的配置方式如下图
    在这里插入图片描述
    本文给出的代码都是参照官方资料来设置的,将USART1_TX设置为推挽复用输出,将USART1_RX设置为浮空输入。

一、USART1端口复用步骤如下:

  1. GPIO端口时钟使能。
  2. 复用的外设时钟使能
  3. 端口模式配置

具体配置代码如下:

//第一步:GPIO端口时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE;
//第二步:复用的外设时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE;

//第三步:端口配置   端口模式配置为复用功能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_Mode_AF_PP;  //推挽复用输出
GPIO_Init(GPIOA, &GPIO_InitStructure);

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

只需要这三步,复用后的串口就可以正常使用了!

二、USART1端口重映射步骤如下:

  1. 打开重映射时钟和USART重映射后的I/O口引脚时钟
  2. I/O口重映射开启
  3. 配置重映射管脚

具体配置代码如下:

//第一步:打开重映射时钟和USART重映射后的I/O口引脚时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
//第二步:I/O口重映射开启
GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);

//第三步:配置重映射管脚,这里只需要配置重映射后的I/O,原来的不需要配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //推挽复用输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  //浮空输入
GPIO_Init(GPIOB,&GPIO_InitStructure);

只需要这三步,重映射后的串口就可以正常使用了。

其他外设功能的复用和重映射也都是类似配置,是不是很简单~

  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值