news 2026/7/15 6:42:16

1.GPIO

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
1.GPIO

1. GPIO介绍

GPIO 是 “General-Purpose Input/Output” 的缩写,即通用输入 / 输出接口,是嵌入式系统(如单片机、MCU)中最基础的硬件接口之一。

核心特点

  1. 通用性:可灵活配置为 “输入” 或 “输出” 模式,适配不同场景;
  2. 可编程:通过寄存器或软件(如 STM32CubeMX)设置其工作模式、电平状态等;
  3. 基础功能载体:是连接外部硬件(如按键、LED、传感器)的 “桥梁”。

STM32H743IIT6 芯片是 176 脚的芯片,它的 IO 口总共有 140 个,IO 分组为 8 组,分别是 GPIOA-GPIOH。这里 GPIOA-GPIOH,16*8=128个 IO口。

2.STM32H743 GPIO功能

GPIO有八种工作模式,分别是:
1、输入浮空
2、输入上拉
3、输入下拉
4、模拟
5、开漏输出
6、推挽输出
7、开漏式复用功能
8、推挽式复用功能

3.GPIO基本结构

见《STM32H7xx参考手册》

4.寄存器

单片机的外设(GPIO、UART、ADC、定时器等)本质是由一组寄存器(控制寄存器、数据寄存器、状态寄存器等)定义的:

  • 比如控制 GPIO 输出高电平,最终是向ODR寄存器的对应位写入 1;
  • 配置 UART 波特率,最终是修改BRR寄存器的分频值;
  • 读取 ADC 采样值,最终是读取DR寄存器的数值。

结论:无论上层如何封装,外设的硬件行为最终都由寄存器的数值决定,这是单片机硬件的核心逻辑

所以,熟悉任何一个外设,都要熟悉其寄存器。

STM32H7每组(这里是 A~H)通用 GPIO 口有 10个 32 位寄存器控制,包括 :
4 个 32 位配置寄存器(MODER、OTYPER、OSPEEDR 和 PUPDR)
2 个 32 位数据寄存器(IDR 和 ODR)
1 个 32 位置位/复位寄存器 (BSRR)
1 个 32 位锁定寄存器 (LCKR)
2 个 32 位复用功能选择寄存器(AFRH 和 AFRL)

具体每个寄存器什么含义,见《STM32H7xx参考手册》

5.GPIO驱动LED灯亮灭

原理图:

代码:

这里为了调试方便,使用rtthread基本工程。

/* * Copyright (c) 2006-2021, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2019-03-05 whj4674672 first version */ #include <rtthread.h> #include <rtdevice.h> #include <board.h> #define LED0_GPIO_PORT GPIOB #define LED0_GPIO_PIN GPIO_PIN_1 #define LED0_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOB_CLK_ENABLE(); }while(0) #define LED1_GPIO_PORT GPIOB #define LED1_GPIO_PIN GPIO_PIN_0 #define LED1_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOB_CLK_ENABLE(); }while(0) /* LED端口定义 */ #define LED0(x) do{ x ? \ HAL_GPIO_WritePin(LED0_GPIO_PORT, LED0_GPIO_PIN, GPIO_PIN_SET) : \ HAL_GPIO_WritePin(LED0_GPIO_PORT, LED0_GPIO_PIN, GPIO_PIN_RESET); \ }while(0) /* LED0 = RED */ #define LED1(x) do{ x ? \ HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_GPIO_PIN, GPIO_PIN_SET) : \ HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_GPIO_PIN, GPIO_PIN_RESET); \ }while(0) /* LED1 = GREEN */ /* LED取反定义 */ #define LED0_TOGGLE() do{ HAL_GPIO_TogglePin(LED0_GPIO_PORT, LED0_GPIO_PIN); }while(0) /* LED0 = !LED0 */ #define LED1_TOGGLE() do{ HAL_GPIO_TogglePin(LED1_GPIO_PORT, LED1_GPIO_PIN); }while(0) /* LED1 = !LED1 */ /** * @brief 初始化LED相关IO口, 并使能时钟 * @param 无 * @retval 无 */ void led_gpio_init(void) { GPIO_InitTypeDef gpio_init_struct; LED0_GPIO_CLK_ENABLE(); /* LED0时钟使能 */ LED1_GPIO_CLK_ENABLE(); /* LED1时钟使能 */ gpio_init_struct.Pin = LED0_GPIO_PIN; /* LED0引脚 */ gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP; /* 推挽输出 */ gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */ gpio_init_struct.Speed = GPIO_SPEED_FREQ_MEDIUM; /* 中速 */ HAL_GPIO_Init(LED0_GPIO_PORT, &gpio_init_struct); /* 初始化LED0引脚 */ gpio_init_struct.Pin = LED1_GPIO_PIN; /* LED1引脚 */ HAL_GPIO_Init(LED1_GPIO_PORT, &gpio_init_struct); /* 初始化LED1引脚 */ LED0(1); /* 关闭 LED0 */ LED1(1); /* 关闭 LED1 */ } int main(void) { led_gpio_init(); while(1) { LED0(0); /* LED0(RED) 亮 */ LED1(1); /* LED1(GREEN) 灭 */ rt_thread_mdelay(500); LED0(1); /* LED0(RED) 灭 */ LED1(0); /* LED1(GREEN) 亮 */ rt_thread_mdelay(500); } }

6.仿真

7.现象

led亮灭

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 4:40:28

探索 A*与 DWA 融合:小白也能懂的路径规划算法之旅

AStar搜索算法&#xff0c;A*和DWA算法融合&#xff0c;适合小白学习哦 程序效果如图所示最近在研究路径规划算法&#xff0c;发现 A*和 DWA 算法都各有千秋&#xff0c;要是把它们融合起来&#xff0c;那效果简直绝了。今天就来跟各位小白分享下这俩算法以及它们融合后的神奇之…

作者头像 李华
网站建设 2026/7/15 0:45:30

计算机毕设java校园志愿服务管理系统 基于Java的校园志愿活动信息化管理系统设计与实现 Java技术驱动的校园志愿服务管理平台开发

计算机毕设java校园志愿服务管理系统a9y349&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着互联网技术的飞速发展&#xff0c;校园志愿服务管理的方式也在不断革新。传统的纸…

作者头像 李华
网站建设 2026/7/14 14:27:37

企业级可观测平台哪家好:全球6家智能可观测厂商实力排名

Gartner预测&#xff0c;到2027年&#xff0c;超过50%的企业将使用可观测性技术来优化业务决策&#xff0c;这一比例远高于2022年的不足20%。现代分布式架构、微服务、容器化和多云环境使得传统的监控手段已无法满足企业对系统状态全面洞察的需求。 面对市场上众多的可观测解决…

作者头像 李华
网站建设 2026/7/15 1:20:34

Android RecyclerView视频自动播放终极指南:5分钟快速集成

Android RecyclerView视频自动播放终极指南&#xff1a;5分钟快速集成 【免费下载链接】AutoplayVideos Android library to auto-play/pause videos from url in recyclerview. 项目地址: https://gitcode.com/gh_mirrors/au/AutoplayVideos 想要在Android应用中实现类…

作者头像 李华
网站建设 2026/7/14 10:36:11

Zen Browser:重新定义高效浏览的桌面伴侣

Zen Browser&#xff1a;重新定义高效浏览的桌面伴侣 【免费下载链接】desktop &#x1f300; Experience tranquillity while browsing the web without people tracking you! 项目地址: https://gitcode.com/GitHub_Trending/desktop70/desktop 在信息爆炸的时代&…

作者头像 李华
网站建设 2026/7/14 7:50:58

MultiWOZ对话数据集:多领域对话训练的完整解决方案

MultiWOZ对话数据集&#xff1a;多领域对话训练的完整解决方案 【免费下载链接】multiwoz Source code for end-to-end dialogue model from the MultiWOZ paper (Budzianowski et al. 2018, EMNLP) 项目地址: https://gitcode.com/gh_mirrors/mu/multiwoz 在人工智能对…

作者头像 李华