STM32引脚模式(默认,复用,重映射)详解与例程(基于STM32F10x系列)

嵌入式裸机&RTOS开发杂谈系列

第一章 STM32引脚模式(默认,复用,重映射)详解与例程(基于STM32F10x系列)


文章目录

  • 嵌入式裸机&RTOS开发杂谈系列
  • 前言
  • 一、引脚模式定义
  • 1.默认模式(普通GPIO)
  • 2.复用模式(Alternate Function)
  • 3.重映射模式(Remap)
  • 二、配置步骤与例程
  • 1.默认模式(普通GPIO)
  • 2.复用模式(以USART1为例)
  • 3.重映射模式(以USART1重映射到PB6/PB7为例)
  • 三.关键注意事项
  • 1.复用模式
  • 2.重映射模式
  • 3.优先级规则
  • 4.解决引脚冲突
  • 5.多外设复用

  • 前言

    为什么引脚会有三种模式?猜测:所有外设都配备自己的专属引脚,会导致引脚利用率过低,成本也会上升。单一的让多个外设用同一组引脚,又会导致资源严重冲突。一种合理的方式,还是多个外设用同一组引脚,但可以灵活切换匹配方案。就入STM所采用的那样。本质:引脚少,外设多,资源要合理分配。


    一、引脚模式定义

    1.默认模式(普通GPIO)

    当引脚作为普通输入/输出使用时,也就是处于默认模式(普通GPIO)。在这种模式下,引脚与外设功能没有关联,这就像是一个独立的输入或输出端口,可以根据我们的需求进行灵活配置。但是,这并不意味着不需要任何准备工作。首先,我们需要配置GPIO时钟。时钟对于芯片内部的各个模块来说就像是心跳一样重要,没有时钟信号,模块就无法正常工作。然后,还需要明确配置引脚的模式,例如是作为输入还是输出,或者是模拟模式等。这就好比是给这个端口赋予了特定的身份,让它知道自己的任务是接收外部信号(输入模式),还是向外发送信号(输出模式),亦或是作为模拟信号的接口(模拟模式)。这种普通GPIO模式在很多简单的应用场景中非常有用,比如控制一个LED灯的亮灭,我们只需要将引脚配置为输出模式,然后通过相应的代码来控制输出电平的高低就可以实现。

    2.复用模式(Alternate Function)

    复用模式(Alternate Function)是STM32引脚模式中非常重要的一种。在现代电子设备中,为了实现多功能集成,往往需要引脚能够在不同功能之间灵活切换。这种复用模式就是为了满足这样的需求而设计的。引脚在这种模式下用于内置外设,像USART(通用同步异步收发器)、SPI(串行外设接口)、TIM(定时器)等都是非常常见的内置外设。当我们要使用这些外设功能时,就需要开启相应外设的时钟并且将引脚配置为复用功能模式。这就好比是在一个多功能的工具箱里,每个工具都有其特定的功能,而复用模式就是让引脚能够从一种基本功能(普通GPIO)转换为特定外设所需的功能。以USART为例,如果我们要实现串口通信功能,就需要将对应的引脚配置为USART的复用模式,这样这个引脚就能够按照USART的通信协议来进行数据的收发操作了。

    3.重映射模式(Remap)

    重映射模式(Remap)为STM32的引脚功能带来了更大的灵活性。在实际的电路设计和系统开发过程中,可能会遇到默认引脚分配不符合需求的情况。比如说,在某些特定的PCB布局中,默认引脚的位置可能会与其他元件产生干扰,或者由于布线的复杂性导致默认引脚的使用不太方便。这时,重映射模式就发挥了作用。它能够将外设的默认引脚映射到其他GPIO引脚,例如将USART1_TX从PA9映射到PB6。不过,要实现这种重映射,并不是简单地进行引脚的切换,还需要配置AFIO时钟和重映射寄存器。这就像是在一个复杂的交通网络中,要改变某条道路的通行路线,不仅需要调整道路的连接方式(重映射引脚),还需要对交通管理系统(配置AFIO时钟和重映射寄存器)进行相应的设置,以确保交通(数据传输等功能)能够正常进行。

    二、配置步骤与例程

    1.默认模式(普通GPIO)

    代码如下(示例):

    // 示例:配置PA5为推挽输出 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  // 开启GPIOA时钟 
    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;         // 推挽输出模式 
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
    

    2.复用模式(以USART1为例)

    代码如下(示例):

    // 示例:配置PA9为USART1_TX(复用推挽输出)
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);  // 开启GPIOA和USART1时钟 
     
    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;          // 复用推挽输出 
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
     
    // 配置USART1参数(波特率、数据位等)
    USART_InitTypeDef USART_InitStruct;
    USART_InitStruct.USART_BaudRate = 9600;
    USART_InitStruct.USART_WordLength = USART_WordLength_8b;
    USART_InitStruct.USART_StopBits = USART_StopBits_1;
    USART_InitStruct.USART_Parity = USART_Parity_No;
    USART_InitStruct.USART_Mode = USART_Mode_Tx;
    USART_Init(USART1, &USART_InitStruct);
    USART_Cmd(USART1, ENABLE);
    

    3.重映射模式(以USART1重映射到PB6/PB7为例)

    代码如下(示例):

    // 示例:将USART1_TX/RX从PA9/PA10重映射到PB6/PB7 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_USART1 | RCC_APB2Periph_AFIO, ENABLE);  // 开启GPIOB、USART1、AFIO时钟 
     
    GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);       // 使能USART1重映射
     
    // 配置PB6为USART1_TX(复用推挽输出)
    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStruct);
     
    // 配置PB7为USART1_RX(浮空输入)
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOB, &GPIO_InitStruct);
     
    // USART1初始化同上(参数配置后需重新使能)
    

    三.关键注意事项

    1.复用模式

    需同时使能GPIO和外设时钟(如USART、SPI)。
    复用功能对应的引脚模式需参考手册(如USART_TX需配置为复用推挽输出)。

    2.重映射模式

    必须开启AFIO时钟(RCC_APB2Periph_AFIO)。
    重映射范围受芯片限制(参考手册中的重映射表)。
    调试引脚(如PA13/PA14)需解除JTAG/SWD复用后才能作为普通GPIO使用。

    3.优先级规则

    若同时使能默认引脚和重映射引脚,外设优先使用重映射后的引脚。

    4.解决引脚冲突

    当默认引脚被其他功能占用时,重映射可优化PCB布局。

    5.多外设复用

    同一引脚可动态切换为不同外设(需重新配置时钟和模式)。
    完整代码和配置细节可参考ST官方手册或。

    作者:123精彩

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32引脚模式(默认,复用,重映射)详解与例程(基于STM32F10x系列)

    发表回复