news 2026/4/3 6:28:08

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/4/1 4:03:13

Go渲染库unrolled/render:轻松处理HTTP响应的终极方案

Go渲染库unrolled/render&#xff1a;轻松处理HTTP响应的终极方案 【免费下载链接】render Go package for easily rendering JSON, XML, binary data, and HTML templates responses. 项目地址: https://gitcode.com/gh_mirrors/ren/render 你是否遇到过在Go Web开发中…

作者头像 李华
网站建设 2026/3/30 12:23:48

数组的查询方法

查询目的 通过数组查询一些满足条件&#xff08;相等、不等等&#xff09;的元素 有一些方法属于Array静态的方法 使用Array.方法() 有一些方法属于非静态方法使用对象。方法名()&#xff0c;需要去创建对象1 FindIndex() :根据参数2的条件返回第一个满足条件元素的索引值FindI…

作者头像 李华
网站建设 2026/4/3 5:23:15

5分钟掌握视频摘要神器:3步提取B站核心内容的终极指南

在信息爆炸的时代&#xff0c;你是否经常面对30分钟的视频却只想了解3分钟的核心内容&#xff1f;这就是视频摘要技术的价值所在——让智能观看助手帮你从海量内容中快速提取关键信息&#xff0c;实现高效学习与娱乐。 【免费下载链接】BilibiliSummary A chrome extension hel…

作者头像 李华
网站建设 2026/3/28 10:40:52

14、目标枚举工具与技术详解

目标枚举工具与技术详解 在网络安全领域,对目标进行枚举是渗透测试的重要环节。通过各种工具和技术,我们可以收集目标系统的信息,为后续的安全评估和攻击提供依据。本文将详细介绍一些常用的目标枚举工具及其使用方法。 1. Nmap绕过防火墙/入侵检测系统的选项 在渗透测试…

作者头像 李华
网站建设 2026/4/3 6:21:49

Wan2.2-T2V-A14B在新闻摘要视频生成中的实验尝试

Wan2.2-T2V-A14B在新闻摘要视频生成中的实验尝试 你有没有想过&#xff0c;一条突发新闻刚发生不到5分钟&#xff0c;你的手机App就已经推送了一段画质清晰、镜头流畅的短视频&#xff1f;没有记者扛着摄像机&#xff0c;也没有剪辑师熬夜拼接——这一切&#xff0c;靠的是AI“…

作者头像 李华
网站建设 2026/3/11 23:24:36

17、计算机取证:使用Kali和Volatility进行内存分析

计算机取证:使用Kali和Volatility进行内存分析 在计算机安全测试领域,取证是一项关键技术,它有助于我们从系统中恢复可能对安全测试有用的信息。本文将从计算机安全测试员的角度出发,介绍如何使用Kali Linux中的工具进行不同类型的取证工作,重点聚焦于使用Volatility工具…

作者头像 李华