首页 > 其他分享 >STM32的端口引脚的复用功能及重映射功能解析

STM32的端口引脚的复用功能及重映射功能解析

时间:2024-11-10 22:19:44浏览次数:3  
标签:HAL 映射 引脚 STM32 及重 Init InitStruct GPIO

STM32微控制器因其强大的外设功能和灵活的引脚复用能力而被广泛应用于嵌入式系统设计中。本文将详细介绍STM32的端口引脚复用功能和重映射功能,以及如何通过代码实现这些功能。

端口引脚复用功能

STM32的GPIO端口可以被复用为多种外设功能,如USART、SPI、I2C等。这种复用功能使得单一引脚可以用于不同的外设,从而节省了引脚资源,提高了设计的灵活性。

复用功能的实现

  1. 使能GPIO时钟:首先需要使能GPIO端口的时钟。

    __HAL_RCC_GPIOA_CLK_ENABLE();
    
  2. 配置GPIO模式:将GPIO引脚配置为复用功能模式,并设置相应的速度和上拉/下拉设置。

    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
  3. 使能外设时钟:使能需要复用的外设时钟。

    __HAL_RCC_USART1_CLK_ENABLE();
    

端口引脚重映射功能

重映射功能允许将某些外设的引脚映射到其他引脚上,这在不同封装的STM32芯片中尤其有用,可以优化引脚布局和布线。

重映射功能的实现

  1. 使能AFIO时钟:重映射需要使能AFIO时钟。

    __HAL_RCC_AFIO_CLK_ENABLE();
    
  2. 配置重映射:根据需要的外设和引脚配置重映射寄存器。

    GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE); // 将USART1的TX和RX引脚映射到PB6和PB7
    

代码示例

以下是一个完整的代码示例,展示了如何配置STM32的GPIO引脚为USART1的TX和RX,并使用重映射功能将这些功能映射到PB6和PB7。

#include "stm32f1xx_hal.h"

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);

int main(void) {
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_USART1_UART_Init();

    char txBuffer[] = "Hello, USART1!";
    HAL_UART_Transmit(&huart1, (uint8_t*)txBuffer, sizeof(txBuffer), HAL_MAX_DELAY);

    while (1) {
        // 主循环中的其他任务
    }
}

static void MX_USART1_UART_Init(void) {
    huart1.Instance = USART1;
    huart1.Init.BaudRate = 9600;
    huart1.Init.WordLength = UART_WORDLENGTH_8B;
    huart1.Init.StopBits = UART_STOPBITS_1;
    huart1.Init.Parity = UART_PARITY_NONE;
    huart1.Init.Mode = UART_MODE_TX_RX;
    huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    huart1.Init.OverSampling = UART_OVERSAMPLING_16;
    HAL_UART_Init(&huart1);
}

static void MX_GPIO_Init(void) {
    __HAL_RCC_GPIOA_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();
    __HAL_RCC_AFIO_CLK_ENABLE();

    GPIO_InitTypeDef GPIO_InitStruct = {0};

    // USART1 TX PA9 复用推挽输出
    GPIO_InitStruct.Pin = GPIO_PIN_9;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    // USART1 RX PA10 浮空输入
    GPIO_InitStruct.Pin = GPIO_PIN_10;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    // 重映射USART1到PB6和PB7
    GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
}

void SystemClock_Config(void) {
    // 时钟配置代码
}

注意事项

  1. 时钟配置:确保GPIO和AFIO时钟使能。
  2. GPIO配置:确保引脚作为复用功能使用时,GPIO配置正确。
  3. 重映射配置:确保重映射寄存器配置正确,以避免外设功能冲突。

通过上述步骤,我们可以在STM32上成功配置端口引脚的复用功能和重映射功能,实现灵活的引脚分配和外设功能映射。这为开发需要灵活引脚使用的嵌入式系统提供了基础。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

标签:HAL,映射,引脚,STM32,及重,Init,InitStruct,GPIO
From: https://blog.csdn.net/weixin_66608063/article/details/143668178

相关文章

  • STM32的内存(堆和栈)
    一般来说单片机的内存指的是FLASH和RAM,当在程序中定义了全局变量、局部变量、只读变量等参数时都是会存放到对应的FLASH或者是RAM中。具体对单片机FLASH和RAM的介绍之后再写,这里只对单片机内存分配,对堆和栈以及变量的存储做一个梳理和记录。1、FLASH(0x08000000)FLASH主要是存放......
  • MAC下使用Clion软件进行STM32的HAL库的开发
    1、准备的软件(1)clion:链接:https://www.jetbrains.com.cn/clion/破解:方法可在某宝上去找。(2)STM32CubeMX与ST_Link:链接:https://www.st.com.cn/content/st_com/zh/stm32cubemx.htmlmac电脑在安装的时候会出现上面的界面,依次安装即可。(3)macOS的包管理器‌brew:打开终端......
  • 基于STM32的温室自主灌溉系统(论文+源码)
    1.总体方案设计本课题为基于STM32的温室自主灌溉系统,通过查阅多种文献和的设计了如图2.1所示的温室自主灌溉系统总体架构,整个系统在器件上包括了主控制器STM32F103,温度传感器DS18B20,土壤湿度传感器YL-69,光敏电阻,显示器LCD1602,继电器,LED灯,蜂鸣器,水泵,按键等等。在功能上,实现了......
  • stm32以太网接口:MII和RMII
    前言使用stm32和lwip进行网络通信开发时,实现结构如下:而MII和RMII就是stm32与PHY芯片之间的通信接口,类似于I2C、UART等。stm32以太网模块有专用的DMA控制器,通过AHB接口将以太网内核和存储器相连。数据发送时,先将数据从存储器以DMA传输到TXFIFO中进行缓冲,然后由MAC内核......
  • STM32基础篇:SYSTICK(系统滴答)
    systick概述Cortex-M处理器内部包含了一个简单的定时器系统嘀嗒(SysTick)。因为所有的Cortex-M芯片都带有这个定时器,软件在不同Cortex-M器件间的移植工作就得以化简。该定时器的时钟源可以是内部时钟(FCLK,CM3上的自由运行时钟),或者是外部时钟(处理器上的STCLK信号)。不过,STCLK的具体......
  • STM32基础
    一、GPIO主要知识点:1、通用GPIO概述2、GPIO的工作方式3、GPIO的相关寄存器4、GPIO的应用5、GPIO的初始化代码1、GPIO概述:GPIO是通用输入/输出的简称,是单片机和外界通讯的必要窗口。换句话来说,GPIO就像我们的计算机的显示器和键盘,我们对单片机的读写操作就是通过I/O口......
  • STM32+阿里云+ESP8266+MQTT+DHT11
    一、阿里云平台环境搭建注册完账号以后,找到控制台->物联网平台。    1.创建一个公共实例,若该实例有ID则为新公共实例2.创建一个产品[如何在物联网平台创建产品_物联网平台(IoT)-阿里云帮助中心(aliyun.com)](https://help.aliyun.com/zh/iot/user-guide/create......
  • 如何对stm32的程序进行加密
    目的:保护单片机里的固件或代码不被读取出来通过代码配置 STM32的寄存器来实现读取保护(RDP)和调试接口锁定,可以采用以下方式:1.启用读取保护(RDP)可以在代码中配置RDP级别。例如在STM32F4系列中,RDP的设置存储在选项字节(OptionBytes)中。RDP的配置可以通过STM32HAL库......
  • 25-018、基于STM32单片机智能行李箱设计-LED-BELL-KEY-指纹-LCD1602-GSM-GPS+HX711称
    本设计由STM32F103C8T6单片机核心板电路+LED指示灯电路+蜂鸣器报警电路+按键电路+指纹电路+LCD1602液晶显示电路+GSM模块电路+GPS模块电路组成。1、如果指纹错误。LED灯会闪,同时蜂鸣器发出滴滴声(3声即可)2、如果指纹输入三次失败后,禁止再用指纹解锁,如果指纹打不开,可以输入按键......
  • 25-009、基于STM32单片机智能公交车自动报站系统RFID语音报站+液晶显示温度和烟雾值设
    本系统由STM32F103C8T6单片机核心板、2.4寸TFT彩屏、JR6001语音播报电路、ULN2003步进电机驱动电路、RC522-RFID刷卡识别电路、轻触开关检测电路、按键电路组成。【1】STM32单片机驱动2.4寸TFT彩屏实时显示所有站台信息、当前公交运行方向、当前到站的站点(并有图标显示);语音播......