STM32 GPIO库函数详解

目录

一、标准库的介绍

库函数的基本概念

二、初始化和复位函数

三、数据读取

1、输入读取

2、输出读取

四、数据写入

五、配置和锁定

六、复用和事件输出

七、特殊功能配置


一、标准库的介绍

库函数(Library Functions)是预先编写好的代码片段或模块,旨在简化和加速软件开发过程。它们通常封装了常见的操作和功能,使得开发者可以通过调用这些函数来实现复杂的功能,而无需从头开始编写所有代码。下面我将简要介绍库函数的概念、分类及其在嵌入式开发中的应用,特别是针对STM32微控制器的库函数。

库函数的基本概念

  1. 定义:库函数是一组预编写的函数,用于执行特定的任务。它们被组织成库(Library),开发者可以在自己的项目中引用这些库并调用其中的函数。

  2. 优势

    • 提高开发效率:通过使用库函数,开发者可以避免重复造轮子,快速实现功能。
    • 提高代码质量:库函数通常经过充分测试和优化,使用它们可以减少错误并提高代码的可靠性。
    • 易于维护:如果库函数中有更新或修复,只需更新库本身,而不需要修改每个使用该库的项目。

二、初始化和复位函数

这些函数用于初始化、复位和配置GPIO端口及其引脚。

  • void GPIO_DeInit(GPIO_TypeDef* GPIOx);

    • 将指定的GPIO端口恢复到其默认(复位)状态。
    • 参数:GPIOx:其中x可以为(A..G)选择GPIO外设。
  • void GPIO_AFIODeInit(void);

    • 将复用功能I/O(AFIO)寄存器恢复到其默认(复位)状态。
  • void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

    • 根据指定初始化GPIOx外设GPIO_InitStruct中的参数。
    • 第一个参数GPIOx:其中x可以为(A..G)选择GPIO外设
    • 第二个参数GPIO_InitStruct:指向GPIO_InitTypeDef结构的指针其中为指定GPIO外设的配置信息。
  • void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);

    • 使用默认值填充GPIO初始化结构体。
    • GPIO_InitStruct:指向GPIO_InitTypeDef结构体的指针被初始化。

三、数据读取

这里要加入一个前面写忘的知识点:GPIO_InitStructure.GPIO_Speed这个是GPIO的输出速度,在输入的情况下,这个参数是没有用的。

这些函数用于读取GPIO端口或特定引脚的输入输出数据。

1、输入读取

  • uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

    • 读取指定GPIO端口的某个引脚的输入数据。
    • GPIO_ReadInputDataBit就是读取输入寄存器的某一位,
    • 参数一:GPIOx:其中x可以为(A..G)选择GPIO外设。
    • 参数二:GPIO_Pin:要读取的端口位。该参数可以是GPIO_Pin_x,其中x可以是(0..15)。
  • uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

    • 读取指定GPIO端口的所有引脚的输入数据。
    • 将整个输入数据寄存器都读出来
    • GPIOx:其中x可以为(A..G)选择GPIO外设。

2、输出读取

  • uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

    • 读取指定GPIO端口的某个引脚的输出数据。
    • 就是读取输出数据的某一位
    • 参数一:GPIOx:其中x可以为(A..G)选择GPIO外设。
    • 参数二:GPIO_Pin:要读取的端口位。该参数可以是GPIO_Pin_x,其中x可以是(0..15)。

GPIO_ReadOutputDataBit读取这个输出寄存器中的某一位

  • uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

    • 读取指定GPIO端口的所有引脚的输出数据。
    • GPIOx:其中x可以为(A..G)选择GPIO外设。

总结来说就是末尾带Bit的只是读取GPIOx(x可以是A~G)中的某一个引脚的内容,如GPIOA0,GPIOB2这样一个引脚的数据。而不带Bit结尾的可以将这一类的所有引脚的数据都读取出来,如GPIOA,就是将GPIOA中0~15号引脚的数据都读取出来了。

四、数据写入

这些函数用于设置或清除GPIO端口的引脚状态,或者直接写入整个端口的数据。

  • void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

    • 设置指定GPIO端口的一个或多个引脚为高电平。
    • 参数一:GPIOx:其中x可以为(A..G)选择GPIO外设。
    • 参数二:GPIO_Pin:需要写的端口位。该参数可以是GPIO_Pin_x的任意组合,其中x可以是(0..15)。
  • void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

    • 清除指定GPIO端口的一个或多个引脚为低电平。
    • 参数一:GPIOx:其中x可以为(A..G)选择GPIO外设。
    • 参数二:GPIO_Pin:需要写的端口位。该参数可以是GPIO_Pin_x的任意组合,其中x可以是(0..15)。
  • void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);

    • 写入指定GPIO端口的一个引脚的状态(高或低)。
    • 参数一:GPIOx:其中x可以为(A..G)选择GPIO外设。
    • 参数二:GPIO_Pin:需要写的端口位。该参数可以是GPIO_Pin_x的任意组合,其中x可以是(0..15)。
    • 参数三:BitVal:表示要写入所选位的值。该参数可以是BitAction枚举值之一:
      • Bit_RESET:清除端口引脚;Bit_SET:设置端口引脚
  • void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

    • 写入指定GPIO端口的所有引脚的状态。
    • 参数一:GPIOx:其中x可以为(A..G)选择GPIO外设。
    • 参数二:PortVal:要写入端口输出数据寄存器的值。

五、配置和锁定

这个函数用于配置GPIO端口的特殊功能和锁定引脚配置。

  • void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
    • 锁定指定GPIO端口的一个或多个引脚配置,防止意外修改。
    • 参数一:GPIOx:其中x可以为(A..G)选择GPIO外设。
    • 参数二:GPIO_Pin:需要写的端口位。该参数可以是GPIO_Pin_x的任意组合,其中x可以是(0..15)。

六、复用和事件输出

这些函数用于配置GPIO端口的复用功能和事件输出。

  • void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);

    • 选择用作事件输出的GPIO引脚。
    • 参数一:GPIO_PortSource:选择GPIO端口作为源端口表示事件输出。
    • 参数二:GPIO_PinSource:指定事件输出的引脚。该参数可以是GPIO_PinSourcex,其中x可以是(0..15)。
  • void GPIO_EventOutputCmd(FunctionalState NewState);

    • 启用或禁用GPIO事件输出。
    • NewState:事件输出的新状态。取值包括:ENABLE或DISABLE。
  • void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);

    • 配置GPIO引脚重映射。
  • void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);

    • 配置外部中断线选择。
    • 参数一:GPIO_PortSource:选择要用作EXTI线路源的GPIO端口。取值为GPIO_PortSourceGPIOx,其中x为(A..G)。
    • GPIO_PinSource:要配置的EXTI线路。该参数可以是GPIO_PinSourcex,其中x可以是(0..15)。

七、特殊功能配置

这个函数用于配置一些特殊的GPIO功能,如以太网媒体接口。需要开发板有以太网的功能。

  • void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);
    • 配置以太网媒体接口(仅适用于某些型号的STM32)。
相关推荐
国科安芯16 分钟前
详解ADC 规则组外部触发:CH2、CH3 与 TRGO2
运维·网络·单片机·嵌入式硬件·mcu·系统架构
ACP广源盛1392462567328 分钟前
WAIC2026 国产算力浪潮@ACP#YLB3118 在算力矩阵中的存储定位与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
ACP广源盛1392462567328 分钟前
WAIC2026 国产算力浪潮下@ACP#IX8024 在算力矩阵中的定位与落地场景
大数据·数据库·人工智能·嵌入式硬件·线性代数·矩阵
Dr.kangder36 分钟前
嵌入式面试总结(十四)——中断处理
单片机·面试·职场和发展·架构·硬件架构·嵌入式
振南的单片机世界1 小时前
硬核菊花链:3个GPIO+无限74HC595=端口扩展“无限套娃”
arm开发·stm32·单片机·嵌入式硬件
zlinear数据采集卡1 小时前
ZLinear产品线全景对比:D223 vs DABL7606 vs DABL-G511选型指南
arm开发·嵌入式硬件·算法·fpga开发·开源
Dr.kangder1 小时前
嵌入式面试总结(十)——流水线
单片机·嵌入式硬件·面试·职场和发展·系统架构·嵌入式
沐-风_2 小时前
双通道LVDS(Dual‑Link)Link0 / Link1:硬件、软件、标准
嵌入式硬件·学习
LCG元4 小时前
STM32软件模拟I2C驱动多从机实战:AHT20温湿度 + BH1750光照 + 0.96寸OLED实时显示
stm32·单片机·嵌入式硬件
Groundwork Explorer6 小时前
WSL2 Ubuntu 22.04 LTS ESP-IDF 5.5 Micropython 1.28 固件编译指南
运维·python·单片机·ubuntu