GD32 GPIO 超详细总结 (江科大风格课件版)


第一部分:GPIO 是什么?
  • 名称:GPIO = General Purpose Input/Output (通用输入输出口)
  • 作用MCU与外部世界交互的桥梁。通过程序控制引脚输出高、低电平,或者读取引脚的电平状态。
  • 功能
    • 输出功能:驱动LED、蜂鸣器、继电器,模拟通信时序(如I2C, SPI, 单总线)等。
    • 输入功能:读取按键、传感器等外部数字信号的状态。

第二部分:GPIO 的八种工作模式 (核心重点!)

GD32的每个GPIO引脚都可以独立配置为以下8种模式中的一种。理解每种模式的电路结构应用场景是关键。

模式简称 (库函数中常见)电路原理 (形象理解)应用场景
1. 模拟输入GPIO_MODE_AIN引脚直接连到内部ADC,完全断开数字电路部分ADC采集,测量电压值。
2. 浮空输入GPIO_MODE_IN_FLOATING引脚悬空,电平状态完全由外部信号决定连接外部驱动源,如串口RX引脚、I2C等。
3. 上拉输入GPIO_MODE_IPU内部有一个约40kΩ的电阻连接到VDD(高电平)。默认状态下引脚为高电平按键检测(按键另一端接地),按下为低,松开为高。
4. 下拉输入GPIO_MODE_IPD内部有一个约40kΩ的电阻连接到GND(低电平)。默认状态下引脚为低电平按键检测(按键另一端接VCC),按下为高,松开为低。
5. 推挽输出GPIO_MODE_OUT_PP最常用输出模式。像一对推挽工作的开关,可以强输出高电平(接近VDD)或强输出低电平(接近0V),驱动能力强。驱动LED、蜂鸣器、舵机等,以及USART_TX、SPI等外设输出。
6. 开漏输出GPIO_MODE_OUT_OD只能强输出低电平高阻态(相当于断开)。要输出高电平,必须依赖外部上拉电阻I2C总线(支持“线与”)、5V电平转换、通信总线。
7. 复用推挽输出GPIO_MODE_AF_PP模式同推挽输出,但输出信号源不是CPU,而是由片内外设(如SPI、TIM)自动控制将引脚作为外设的输出脚,如SPI_SCK, TIM_PWM。
8. 复用开漏输出GPIO_MODE_AF_OD模式同开漏输出,输出信号源由片内外设自动控制将引脚作为外设的输出脚,如I2C_SDA。

江科大经典总结

  • 输入:测电压。浮空是“你说了算”,上/下拉是“有个默认值”。
  • 输出:供电流。推挽是“能高能低真汉子”,开漏是“只能拉低,想高得找人(上拉电阻)帮忙”。
  • 复用:CPU不管了,交给外设大哥来控制。

第三部分:GPIO 基本结构 (了解)

在这里插入图片描述

一个GPIO口内部主要包含:

  1. 保护二极管:防止引脚电压过高或过低。
  2. 上拉/下拉电阻:约40kΩ,可通过寄存器开关。
  3. 施密特触发器:将模拟电压整形为数字信号0或1。
  4. 输出驱动器:推挽或开漏结构,由P-MOS和N-MOS管组成。

第四部分:GPIO 操作流程 (代码实践)

“万事开头先开时钟!”

  1. 开启GPIO端口时钟

    rcu_periph_clock_enable(RCU_GPIOA); // 使能GPIOA的时钟
    // 如果是复用功能或重映射,可能还需要开启AFIO时钟
    // rcu_periph_clock_enable(RCU_AF);
    
  2. 初始化GPIO(配置模式与速度)

    • 方法一 (面向系列:F10x, F30x, F20x, E10x等):使用 gpio_init 函数。
      // 配置PA0为上拉输入
      gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_0);// 配置PA1为推挽输出,速度50MHz
      gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
      
    • 方法二 (面向系列:F1x0, F3x0, F4xx, E23x等):使用 gpio_mode_setgpio_output_options_set
      // 配置PA1为推挽输出,无上下拉,速度50MHz
      gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1);
      gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
      
  3. 操作GPIO

    // 输出操作
    gpio_bit_set(GPIOA, GPIO_PIN_1);    // PA1输出高电平
    gpio_bit_reset(GPIOA, GPIO_PIN_1);  // PA1输出低电平
    gpio_bit_write(GPIOA, GPIO_PIN_1, SET); // 等同于set
    gpio_bit_write(GPIOA, GPIO_PIN_1, RESET); // 等同于reset// 输入操作
    if (gpio_input_bit_get(GPIOA, GPIO_PIN_0) == SET) {// 如果PA0检测到高电平
    } else {// 如果PA0检测到低电平
    }
    

第五部分:重要注意事项 (避坑指南)
  1. 先开时钟,再操作:不开启外设时钟,所有操作无效!
  2. 电平兼容性
    • 非FT(5V耐受)引脚,输入电压绝对不能超过VDD + 0.3V
    • 即使FT引脚,也主要在输入模式下耐受5V。
  3. JTAG/SWD调试引脚PA13, PA14, PA15, PB3, PB4 默认用于调试,想当普通GPIO用,必须先禁用JTAG(通常保留SWD即可)。
    gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE); // 常用:关闭JTAG,使能SWD
    
  4. 未使用的引脚:最好设置为模拟输入模式,悬空容易引入干扰。
  5. 输出速度:高速(50MHz)适合通信,低速(2MHz)适合驱动简单外设,更省电抗干扰。

第六部分:总结与实战选择
  • LED、蜂鸣器推挽输出
  • 按键上拉输入(按键接地)或下拉输入(按键接VCC)。
  • 串口RX浮空输入
  • 串口TX推挽输出
  • I2C复用开漏输出必须外加上拉电阻,如4.7K)。
  • ADC采集模拟输入
  • PWM输出复用推挽输出

记住江科大口诀:

输出用推挽,输入看默认;
开漏要上拉,复用给大哥;
模拟给ADC,调试引脚要配置!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/97919.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/97919.shtml
英文地址,请注明出处:http://en.pswp.cn/web/97919.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《嵌入式硬件(八):基于IMX6ULL的点灯操作》

一、IMX6ULL启动代码.global _start_start:ldr pc, _reset_handlerldr pc, _undefine_handlerldr pc, _svc_handlerldr pc, _prefetch_abort_handlerldr pc, _data_abort_handlerldr pc, _reserved_handlerldr pc, _irq_handlerldr pc, _fiq_handler_undefine_handler:ldr pc, …

Spring Boot 调度任务在分布式环境下的坑:任务重复执行与一致性保证

前言在实际业务开发中,调度任务(Scheduled Task) 扮演着重要角色,例如:定时同步第三方数据;定时清理过期缓存或日志;定时发送消息或报告。Spring Boot 提供了非常方便的 Scheduled 注解&#xf…

剖析ReAct:当大模型学会“边想边做”,智能体的进化之路

你是否曾惊叹于大语言模型(LLM)强大的推理能力,却又对其“纸上谈兵”、无法真正与世界交互而感到遗憾?你是否好奇,如何让AI不仅能“说”,更能“做”,并且在做的过程中不断思考和调整&#xff1f…

小型无人机传感器仿真模型MATLAB实现方案

一、系统架构设计 无人机传感器仿真模型需集成多物理场建模与数据融合模块,典型架构包含: 动力学模型:六自由度刚体运动方程传感器模型:IMU/GNSS/视觉/气压计数学建模数据融合层:卡尔曼滤波/EKF算法实现环境交互模块&a…

hadoop集群

ssh-keygen -t rsassh-copyid 用户名远程服务器地址start-dfs.sh chown [选项] 新所有者[:新所属组] 目标文件/目录常用选项:-R:递归修改目录下所有文件和子目录的所有者(处理目录时常用)-v:显示修改过程的详细信息-c&…

大模型入门实践指南

大模型入门教程:从概念到实践 大模型(Large Language Model, LLM)是当前人工智能领域的核心技术,其本质是通过大规模数据训练、具备复杂语言理解与生成能力的深度学习模型。本教程将从基础概念出发,带你理解大模型的核心逻辑,并通过可直接跑通的代码示例,快速上手大模型…

猫头虎开源AI分享:一款CSV to Chat AI工具,上传CSV文件提问,它可以即时返回统计结果和可视化图表

猫头虎开源AI分享:一款CSV to Chat AI工具,上传CSV文件提问,它可以即时返回统计结果和可视化图表 摘要 本文将详细介绍一款开源工具——CSV to Chat AI,它允许用户上传CSV文件并通过自然语言提问,系统会即时返回统计…

洛谷P9468 [EGOI 2023] Candy / 糖果题解

[EGOI 2023] Candy / 糖果 思路 NNN 这么小基本就是瞎打的 DP 了。 设 dpi,jdp_{i,j}dpi,j​ 为操作 jjj 次后前 iii 项的和最大是多少。 考虑转移,我们可以枚举 iii 并考虑将其移动到 ppp 位置,总共操作 kkk 次,那么就有 dpp,kmin⁡(dpp,…

AI智能体(Agent)大模型入门【3】--基于Chailit客服端实现页面AI对话

目录 前言 安装chailint 创建中文语言环境 创建chailint页面客户端 前言 本篇章将会基chailit框架实现页面进行AI对话。 若没有自己的本地模型对话,需要查看专栏内的文章,或者点击链接进行学习部署 AI智能体(Agent)大模型入…

【高并发内存池——项目】定长内存池——开胃小菜

提示:高并发内存池完整项目代码,在主页专栏项目中 文章目录 提示:高并发内存池完整项目代码,在主页专栏项目中 先设计一个定长的内存池 一、为什么需要定长内存池? 🏢 传统内存分配的痛点 🏭 内…

6-获取磁盘分区信息

观察文件 获取server端电脑里面存在哪些盘符 int MakeDriveInfo() { //1>A 2>B &#xff08;原本属于软盘的 &#xff09;3>C ... 26>Zstd::string result;for (int i 1; i < 26; i) { //让其循环if (_chdrive(i) 0) //改变当前的驱动,_chdrive函数(c和c中)应…

每天认识一个电子器件之LED灯

LED选型核心参数一览表参数类别关键参数说明 & 为什么重要基本电气参数正向电压 (Vf)LED正常发光时两端的电压降。必须匹配您的电路电压。红/黄光约1.8-2.2V&#xff0c;蓝/绿/白光约2.8-3.6V。正向电流 (If)LED正常发光时所需的电流。决定了LED的亮度&#xff0c;必须用电…

Spring Boot 集成 Flowable 7.1.0 完整教程

一、引言 在企业级应用开发中&#xff0c;工作流管理是不可或缺的一部分。从简单的请假审批到复杂的业务流程&#xff0c;工作流引擎能够显著提升系统的灵活性和可维护性。​​Flowable​​ 作为一个轻量级、基于 Java 的开源工作流引擎&#xff0c;完美支持 ​​BPMN 2.0​​…

uniapp离线打包安卓apk详细教程,从HbuilderX新建项目到Android Studio详细配置(一)

目录 一、基础离线打包&#xff0c;无引入模块&#xff0c;无原生插件 1. HbuilderX新建项目&#xff0c;开发者后台申请证书和离线key 2.HbuilderX生成本地包 二、Android Studio配置 1.下载离线SDK&#xff0c;解压&#xff0c;SDK版本需要和HbuilderX 版本一致&#xf…

蓝牙鼠标频繁卡顿?一招解决 Win10/11 的 USB 省电机制干扰问题

蓝牙鼠标频繁卡顿&#xff1f;一招解决 Win10/11 的 USB 省电机制干扰问题 问题背景 在使用蓝牙鼠标时&#xff0c;很多用户会遇到以下问题&#xff1a; 鼠标移动卡顿、延迟明显偶尔断连&#xff0c;需重新配对尤其在笔记本合盖或待机后恢复时更明显 这些问题在 Windows 10/11 …

领码方案|Spring Boot 异步请求深度剖析:从原理到 AI 驱动的吞吐量优化

摘要 本文以“领码方案”为核心&#xff0c;深入剖析 Spring Boot 异步请求的底层原理、线程模型、三种常用实现方式&#xff08;Callable、WebAsyncTask、DeferredResult&#xff09;的运行机制与性能特征&#xff0c;并结合 AI 驱动的自适应线程池调优、云原生架构下的弹性伸…

C++基础(13)——list类的模拟实现

目录 一、接口函数和类总览 二、节点结构体的实现 构造函数 三、迭代器结构体的实现 迭代器模版参数 构造函数 重载运算符 重载--运算符 重载运算符 重载*运算符 重载->运算符 四、list的模拟实现 默认成员函数 构造函数 拷贝构造函数 赋值运算符重载函数 …

从 APP 界面设计到用户体验优化:如何让你的应用脱颖而出?

作为一个经验丰富的设计师&#xff0c;在产品优化方面我踩过不少坑&#xff0c;也见过很多团队在界面设计和用户体验上的误区。APP 的外观决定了用户的第一印象&#xff0c;但能不能留住用户、让他们愿意持续使用&#xff0c;最终还是看体验。今天就结合自己的经验&#xff0c;…

Kafka如何配置生产者拦截器和消费者拦截器

Kafka 的生产者拦截器和消费者拦截器允许你在消息发送前后以及消息消费前后嵌入自定义逻辑&#xff0c;用于实现监控、审计、消息修改等功能。本文我们就用一个最常见的传递TraceId的案例来说明下这两类拦截器如何来使用。 生产者发送拦截器 生产者拦截器需要实现 org.apache.k…

vue表单弹窗最大化无法渲染复杂组件内容

背景&#xff1a;最大化后选然后复杂组件内容丢失&#xff0c;如下拉框、图片上传组件修复方案&#xff1a;使用深拷贝核心代码this.maximizeDialog {visible: true,title: 患者申请 - 最大化查看,formModel: JSON.parse(JSON.stringify(this.formModel || [])),formLogic: JS…