STM32 : GPIO_TypeDef

ops/2025/1/12 11:29:22/

        结构体定义 (GPIO_TypeDef) 是STM32微控制器中用于描述GPIO端口寄存器的典型方式。每个GPIO端口(如 GPIOAGPIOB 等)都由一组寄存器组成,这些寄存器控制和监控GPIO引脚的状态。

寄存器解释

  1. CRL (Control Register Low):

    • 低8位引脚的控制寄存器。
    • 用于配置GPIO引脚的功能模式(输入、输出等)、速度、上拉/下拉电阻等。
  2. CRH (Control Register High):

    • 高8位引脚的控制寄存器。
    • 与CRL类似,但针对高8位引脚。
  3. IDR (Input Data Register):

    • 输入数据寄存器。
    • 读取GPIO引脚的当前状态(输入模式下)。
  4. ODR (Output Data Register):

    • 输出数据寄存器。
    • 写入GPIO引脚的输出值(输出模式下)。
  5. BSRR (Bit Set/Reset Register):

    • 位设置/复位寄存器。
    • 用于原子地设置或清除特定GPIO引脚的值,避免中断干扰。
  6. BRR (Bit Reset Register):

    • 位复位寄存器。
    • 专门用于清除特定GPIO引脚的值。
  7. LCKR (Lock Register):

    • 锁定寄存器。
    • 用于锁定GPIO引脚的配置,防止意外修改。

结构体定义

typedef struct
{__IO uint32_t CRL;__IO uint32_t CRH;__IO uint32_t IDR;__IO uint32_t ODR;__IO uint32_t BSRR;__IO uint32_t BRR;__IO uint32_t LCKR;
} GPIO_TypeDef;
  • __IO 是一个类型修饰符,表示这些变量是内存映射的寄存器,通常用于外设寄存器访问。
  • 这些寄存器通过结构体的方式组织在一起,使得对GPIO端口的操作更加方便和直观。

为什么这样定义

  1. 统一接口:

    • 将所有相关的寄存器封装在一个结构体中,提供了统一的接口,便于管理和操作。
    • 每个GPIO端口(如 GPIOAGPIOB 等)都是这种结构体类型的实例。
  2. 类型安全:

    • 使用结构体可以确保类型安全,避免了直接使用指针或其他不安全的方法来访问寄存器。
    • 这种方式也便于编译器进行类型检查和优化。
  3. 代码可读性和维护性:

    • 结构体提供了一种清晰的方式来组织和访问寄存器。
    • 使得代码更易于阅读和维护,尤其是在处理多个GPIO端口时。

示例

假设你有一个 GPIOA 端口:

GPIO_TypeDef GPIOA;

你可以通过以下方式访问其寄存器:

// 设置GPIOA的第5个引脚为高电平
GPIOA->ODR |= GPIO_PIN_5;// 清除GPIOA的第5个引脚为低电平
GPIOA->ODR &= ~GPIO_PIN_5;// 原子地设置GPIOA的第5个引脚为高电平
GPIOA->BSRR = GPIO_PIN_5;// 原子地清除GPIOA的第5个引脚为低电平
GPIOA->BRR = GPIO_PIN_5;

总结

  • GPIO_TypeDef 结构体定义了所有GPIO端口寄存器的标准布局。
  • 每个GPIO端口(如 GPIOAGPIOB 等)都是这种结构体类型的实例。
  • 这种设计提供了统一的接口和类型安全,提高了代码的可读性和维护性。

http://www.ppmy.cn/ops/149433.html

相关文章

数据库 -- 视图

1. 视图 1.1 什么是视图 视图是⼀个虚拟的表,它是基于⼀个或多个基本表或其他视图的查询结果集。视图本⾝不存储数据,⽽是通过执⾏查询来动态⽣成数据。⽤⼾可以像操作普通表⼀样使⽤视图进⾏查询、更新和管理。视图本⾝并不占⽤物理存储空间&#xff…

单片机实物成品-011 火灾监测

火灾监测(20个版本) 版本20: oled显示温湿度烟雾浓度火焰传感器天然气浓度窗户风扇水泵排气系统声光报警语音播报按键WIFI模块 ----------------------------------------------------------------------------- https://www.bilibili.com…

基于Python的音乐播放器 毕业设计-附源码73733

摘 要 本项目基于Python开发了一款简单而功能强大的音乐播放器。通过该音乐播放器,用户可以轻松管理自己的音乐库,播放喜爱的音乐,并享受音乐带来的愉悦体验。 首先,我们使用Python语言结合相关库开发了这款音乐播放器。利用Tkin…

Java 工厂模式、工厂方法模式、抽象工厂模式

Java 工厂模式、工厂方法模式、抽象工厂模式 引言 在软件开发中,设计模式是解决特定问题的通用解决方案。工厂模式作为一种创建型设计模式,在对象创建过程中扮演着重要角色。本文将详细介绍Java中的工厂模式,包括其概念、应用场景、实现方式…

Streamlit+Selenium快速构建一个网络爬虫应用

项目需要从网上爬取数据,用了八爪鱼来进行测试,可以通过自定义任务,不需要编程即可实现对于数据的爬取,但是缺点是免费版本自定义任务有数量限制,另外在采集过程的控制上还不够便利,对于熟悉Python编程的人…

uni-app的学习

uni-app 有着跨平台支持、丰富的插件和生态系统、高性能、集成开发工具HBuilderX的配合使用。允许使用者仅通过一套代码发布到多平台使用。 uni-app官网 uni-app 是一个适合开发跨平台移动应用和小程序的框架,能够大幅提高开发效率。 一、了解 1.1 工具准备 从Git…

数据开发八股文整理- Hadoop

什么是hadoop Hadoop是一个分布式系统基础架构,主要解决海量数据的存储和海量数据的分析计算问题 Hadoop运行模式 本地模式和为分布式模式都是单机运行 完全分布模式即是多台服务器组成分布式环境 Hadoop集群中的组件 Name Node-负责存储文件的元数据,例…

vue3树形组件+封装+应用

文章目录 概要应用场景代码注释综合评价注意事项功能拓展代码说明概要 创建一个基于Vue 3的树形结构组件,用于展示具有层级关系的数据,并提供了节点展开/折叠、点击等交互功能。以下是对其应用场景、代码注释以及综合评价和注意事项的详细说明。 应用场景 这个组件适用于需…