0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

GPIO、PWM、ADC,到底怎么区分?

信盈达 2025-11-14 10:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式开发中,我们经常听到 GPIO、PWM、ADC 这些术语。初学者常常搞不清楚它们的区别和用途:“它们不是都是和电平有关吗?为什么还要分这么多种?”今天,我们就把这些基础概念讲清楚,让你在动手开发时不再迷糊。


GPIO

最基础的数字接口


GPIO(General Purpose Input/Output),通用输入输出,是 MCU 上最常见的引脚类型。GPIO 的核心功能就是读取或者输出数字信号:高电平或者低电平。


输入模式:GPIO 可以用来读取开关状态、传感器输出或其他数字信号。


输出模式:GPIO 可以控制 LED 灯的亮灭、继电器开关,甚至驱动一些简单的外设。


GPIO 的特点是简单直接,只处理“开或关”两种状态。要注意的是,GPIO 并不适合直接输出模拟信号,也无法实现平滑的亮度或速度控制。


PWM

数字信号模拟模拟量


PWM(Pulse Width Modulation,脉宽调制)是一种利用数字信号模拟连续输出的方法。简单来说,它通过快速切换高低电平,调整高电平在整个周期中的占比,从而控制输出平均电压。


占空比:PWM 的核心概念是占空比(Duty Cycle),即高电平持续时间占整个周期的比例。占空比越大,输出平均电压越高。


应用场景:控制电机转速、LED 亮度调节、舵机位置控制等。


举例来说,你想让 LED 灯亮一半亮度,用 GPIO 是不可能的,但用 PWM 就可以通过调整占空比,实现亮度渐变。

ADC

把模拟信号变成数字信号


ADC(Analog-to-Digital Converter,模数转换器)**是 MCU 用来读取模拟信号的接口。很多传感器输出的不是简单的高低电平,而是连续变化的电压,例如温度、光照、声音等。


原理:ADC 会把模拟电压转换成 MCU 可以处理的数字值。比如,输入 03.3V 的电压,经过 12 位 ADC 转换,可能得到 04095 的数字。


应用场景:读取温度传感器光敏电阻压力传感器等模拟信号。


ADC 的特点是只能读取模拟信号,输出的是数字值,便于程序处理。



04

GPIO、PWM、ADC 的区别与联系

信号类型

GPIO:数字信号,高/低电平。

PWM:数字信号模拟模拟量,通过占空比控制平均电压。

DC:输入模拟信号,转换成数字数据。


应用目的

GPIO:简单控制或读取开关状态。

PWM:控制模拟效果,例如亮度、速度。

ADC:采集外部传感器的连续信号,用于计算或决策。


控制方向

GPIO 和 PWM:通常是 MCU 向外控制。

ADC:通常是 MCU 从外部采集数据。



05

开发者常见误区


GPIO 可以模拟亮度?

很多人一开始会尝试用 GPIO 控制 LED 亮度,但 GPIO 只有高低两种状态,想要亮度渐变,必须用 PWM。


PWM 是模拟接口?

虽然 PWM 可以模拟输出模拟电压,但本质上还是数字信号,只是利用占空比让输出平均值变化。


ADC 直接控制设备?

ADC 只能读取信号,不能直接控制外设。要控制设备,需要通过程序处理 ADC 值,再用 GPIO 或 PWM 输出。


06

实践中的选择指南


控制开关或简单状态:GPIO 足够。

调节亮度或速度:PWM 最合适。

读取传感器信号:ADC 必不可少。


此外,很多嵌入式 MCU 都支持 GPIO 与 PWM、ADC 复用,一条引脚可能同时支持多种功能。在配置前,一定要查手册,明确引脚功能和寄存器设置。理解 GPIO、PWM、ADC 的区别和联系,是嵌入式开发的入门基础。


掌握它们,你就能更准确地控制外设和采集数据,为后续开发打下坚实基础。无论是控制 LED 灯、驱动舵机,还是读取传感器数据,选择合适的接口都能让你的程序更简洁、可靠。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    116

    文章

    5912

    浏览量

    227272
  • adc
    adc
    +关注

    关注

    100

    文章

    7979

    浏览量

    557444
  • GPIO
    +关注

    关注

    16

    文章

    1337

    浏览量

    56630
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    请问如何区分触发STM32外部中断的GPIO引脚?

    如何区分触发STM32 外部中断的GPIO引脚?
    发表于 04-01 07:07

    ADC配置为什么不要像PWM模块设置一样,还要指定那个pwm模块的那一路pwm信号呢?

    在配置ADC采样时,设置相应的GPIOADC采样 GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_1|
    发表于 08-27 09:51

    TWEN-ASR ONE 语音识别系列教程(2)— GPIOADCPWM的使用

    TWEN-ASR ONE 语音识别系列教程(2)— GPIOADCPWM的使用提示:作者使用 TWEN-ASR ONE V1.0开发板进行开发学习。文章目录前言一、TWEN-ASR ONE
    发表于 06-18 19:47

    PWM到底是什么?怎样去使用呢

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、PWM到底是什么二、使用步骤1.引入库2.读入数据总结前言此篇文章以一个通俗的方式带你了解PWM信号,写得非常详细
    发表于 01-13 08:22

    使用ADC来改变定时器1PWM的占空比

    1. 简介使用定时器1 在PB3引脚上输出频率100K的PWM波,然后使用ADC0 的通道1采集输入的电压型号来改变定时器1PWM的占空比。2. 时钟分析Cortex-M4时钟最高200MAPB2
    发表于 12-14 16:26

    ESP32-Wroom上到底有多少个ADC使能引脚?

    谷歌搜索“Esp32 ADC 引脚数”会得到“ESP32 有 18 个 ADC 通道”。然而,数据表和引脚图表明只有 16 个可用,GPIO9 保留用于 WIFI 使用。ESP32-Wroom 上
    发表于 04-12 08:20

    Nano100B如何初始化GPIO/Timer/ADC/PWM和SPI

    : NuTiny-EVB-Nano130-LQFP128 v1.0 此示例代码将演示如何初始化 GPIO、 Timer、 ADCPWM 和 SPI 。 当系统停电时, 它会因 Timer 中断而醒来 。 您可以在下列时间下
    发表于 08-23 06:57

    如何使用PWM触发ADCPWM刹车功能来阻止PWM输出

    应用程序:本文件描述如何使用 PWM 触发 ADCPWM 刹车功能来阻止 PWM 输出 。 BSP 版本:Mini51DE系列 BSP CMISIS V3.02.000 硬件
    发表于 08-23 07:31

    Nano130如何初始化GPIO、Timer、ADCPWM和SPI

    : NuTiny-EVB-Nano130-LQFP128 v1.0 此示例代码将演示如何初始化 GPIO、 Timer、 ADCPWM 和 SPI 。 当系统停电时, 它会因 Timer 中断而醒来 。 您可以在下列时间下
    发表于 08-30 06:21

    ADC0808控制PWM输出程序

    ADC0808如何控制PWM输出呢?ADC0808控制PWM输出的程序,一起来了解一下。
    发表于 11-22 09:33 8939次阅读

    MPPT充电与PWM充电效率到底怎么样

    本文档的主要内容详细介绍的是MPPT充电与PWM充电效率到底怎么样。
    发表于 01-14 16:16 100次下载
    MPPT充电与<b class='flag-5'>PWM</b>充电效率<b class='flag-5'>到底</b>怎么样

    PWM硬件间隔触发ADC

    PWM硬件间隔触发ADC(新型电源技术课程答案)-在各种应用场景中,比如电机,电源,变频器等应用中,ADC的采样点会有很严格的要求,如果采样点选择错误,会给整个控制系统造成严重后果,本文针对STM32Fxxx的
    发表于 08-04 18:00 59次下载
    <b class='flag-5'>PWM</b>硬件间隔触发<b class='flag-5'>ADC</b>

    Part13--怎么区分I/O与GPIO

    对于刚进入嵌入式学习的小伙伴,是不是总会遇到 I/O和GPIO的说法,两个到底都是什么呢?这里为你揭开I/O和GPIO的神秘面纱,快来学习一波。一句话总结, I/O是泛指所有类型的输入输出端口,包括单向的端口如逻辑门电路的输入输
    发表于 11-26 15:51 17次下载
    Part13--怎么<b class='flag-5'>区分</b>I/O与<b class='flag-5'>GPIO</b>

    定时器,pwmgpio

    _Init(u16 arr,u16 psc);pwm部分初始化中的arr和psc2.ARR和PSC如何取值3.ARR,PSC的影响4.输出比较模式5.指定输出极性6.输出比较状态三、GPIO的输入输出总结 在上一周做小车时,我采用了STM32F103C8
    发表于 12-31 18:58 1次下载
    定时器,<b class='flag-5'>pwm</b>,<b class='flag-5'>gpio</b>

    共射极、共基极、共集电极电路到底怎么区分

      我们经常见到术语:共射极、共基极、共集电极电路,到底怎么区分呢?
    的头像 发表于 03-17 15:00 2.9w次阅读
    共射极、共基极、共集电极电路<b class='flag-5'>到底</b>怎么<b class='flag-5'>区分</b>