一、GPIO的八种工作模式
| 模式大类 | 具体模式 | 内部结构特点 | 电平表现 | 典型应用场景 |
|---|---|---|---|---|
| 输入模式 | 浮空输入 | 无上拉/下拉电阻,施密特触发器开启 | 完全由外部电路决定,悬空时电平不确定(易受干扰) | 外部已有上下拉电阻的信号检测、中断输入 |
| 上拉输入 | 内部接3.3V上拉电阻 | 默认高电平,外部接地时读低电平 | 按键检测(按键接地)、默认高电平信号输入 | |
| 下拉输入 | 内部接GND下拉电阻 | 默认低电平,外部接高电平时读高电平 | 按键检测(按键接VCC)、默认低电平信号输入 | |
| 模拟输入 | 关闭施密特触发器,直连ADC/DAC | 不输出数字电平,直接传输模拟信号 | ADC电压采集(如温度传感器)、DAC输出、低功耗模式 | |
| 输出模式 | 推挽输出 | P-MOS和N-MOS互补导通 | 可主动输出高/低电平,驱动能力强(最大25mA) | LED驱动、继电器控制、普通数字信号输出 |
| 开漏输出 | 仅N-MOS导通,需外接上拉电阻 | 只能主动输出低电平,高电平靠外部上拉实现 | I2C总线(软件模拟)、电平转换(3.3V转5V) | |
| 复用模式 | 复用推挽输出 | 由片上外设(如USART/SPI)控制,推挽结构 | 外设自动输出高低电平,驱动能力强 | 串口TX、SPI MOSI/SCK、PWM输出 |
| 复用开漏输出 | 由片上外设(如I2C)控制,开漏结构 | 需外接上拉电阻,支持多主机"线与" | 硬件I2C SDA/SCL、CAN总线 |
模式选择核心逻辑
- 判断信号流向
- 外部→STM32(接收信号):优先选输入模式。若需默认电平稳定,选上拉/下拉输入;若采集模拟信号,选模拟输入。
- STM32→外部(输出信号):优先选输出模式。驱动能力强选推挽输出;需电平转换或多设备共享总线选开漏输出。
- 外设功能复用:根据外设类型选复用模式。高速通信(如SPI)选复用推挽;I2C等开漏总线选复用开漏。
2.关键注意事项
- 按键检测首选上拉输入:避免悬空干扰,按下时电平明确翻转。
- I2C必须用开漏模式:硬件I2C需外接上拉电阻,软件模拟I2C可用普通开漏输出。
- ADC采集必选模拟输入:关闭数字电路以减少噪声干扰,确保采样精度。
- 推挽输出勿直接并联:多个推挽输出引脚连接会导致短路,开漏输出可实现"线与"。
二. 什么是看门狗计时器?
概念:旨在检测和恢复系统故障。它是一种硬件计时器,要求系统在规定的时间内定期对其进行复位(喂狗)。如系统没有即时复位计时器将会溢出,并触发一种预定的响应,通常是系统复位或重启。
作用:
- 防止系统卡死:如果系统由于软件错误、死锁或其他原因导致无法继续正常工作,看门狗定时器可以自动复位系统从而防止系统长时间卡死。
- 提高系统可靠性:在任务关键的嵌入式应用中,如工业控制、汽车电子、医疗设备等,看门狗定时器是确保系统持续可靠运行的重要手段。
- 恢复程序运行:当系统由于不可预见的故障导致异常行为时,看门狗定时器可以让系统迅速恢复到已知的初始状态,减少故障的影响。
示例:
cpp
//主程序
int main(void) {
wDT_Init();//初始化看门狗定时器
while (1) {// 模拟程序正常运行
for (volatile int i = 0; i < 1000000; i++) {
//程序的其他部分
}
//喂狗操作,防止看门狗定时器复位系统
IWDG->KR= 0xAAAA;//喂狗,重置看门狗定时器计数
}
}
📌 一句话总结
看门狗计时器是嵌入式系统的**"自动重启保镖"** ,它通过监控程序是否按时"喂狗",在系统死机或跑飞时强制复位,确保设备能自主恢复运行而无需人工干预。
三、什么是DMA?
✨ 核心价值:解放CPU,提升效率
DMA最大的价值在于将CPU从繁琐、重复的数据搬运任务中解放出来,使其能专注于更核心的计算和逻辑处理。
- 提升CPU效率:CPU不再需要为每个字节的传输而忙碌,可以并行处理其他任务,系统整体性能得到质的飞跃。
- 提高数据传输速度:DMA是专为数据搬运设计的硬件,其传输效率远高于由软件(CPU)控制的逐字节传输。
- 降低系统功耗:CPU在等待数据传输时会处于空闲状态,而DMA的高效工作可以缩短CPU的等待时间,从而降低整体功耗。
📊 应用场景对比
| 场景 | 无DMA (CPU搬运) | 有DMA (DMA搬运) |
|---|---|---|
| 串口接收数据 | CPU需不断查询或等待中断,再逐个字节存入数组,占用大量时间。 | DMA自动将串口收到的每个字节存入数组,CPU可处理其他逻辑,仅在接收完成后处理整包数据。 |
| ADC数据采集 | 每次转换完成都触发中断,CPU需读取数据并存入内存,高频采样时CPU不堪重负。 | DMA自动将ADC转换结果连续存入内存数组,实现高效、不间断的数据流采集。 |
| 内存数据拷贝 | CPU通过循环指令,一个字一个字地复制,效率低下。 | DMA可以极快的速度完成大块内存数据的复制,CPU几乎零开销。 |
📌 一句话总结
DMA是嵌入式系统中的"数据搬运工",它通过硬件自动完成数据在内存与外设间的传输,将CPU从繁琐的搬运任务中解放出来,是实现系统高效、实时运行的关键技术。
四、什么是PWM?
✨ 核心价值:用数字世界控制模拟世界
单片机的IO口只能输出高电平(如5V)和低电平(0V)两种数字信号。现实中很多设备(如电机、LED灯)需要连续变化的模拟电压来控制。PWM完美地解决了这个问题,它就像一座桥梁,让数字系统能够精确、高效地控制模拟设备。
PWM的工作原理基于面积等效原理 (也叫冲量等效原理)。简单来说,就是通过控制一个周期内"开"的时间比例,来等效出一个变化的平均电压。
它的工作由两个核心参数决定:
- 频率 (Frequency) :
- 指开关每秒钟"开-关"循环的次数。频率越高,切换越快。
- 占空比 (Duty Cycle) :
- 指在一个循环周期内,"开"的时间所占的百分比。
- 占空比 = (高电平时间 / 总周期时间) × 100%
举个例子:
假设你用一个5V的电源,通过一个高速开关给一个灯泡供电。
- 50% 占空比 :开关一半时间开,一半时间关。灯泡得到的平均电压就是 2.5V,亮度为中等。
- 80% 占空比 :开关大部分时间都开着。灯泡得到的平均电压就是 4V,亮度更亮。
- 20% 占空比 :开关大部分时间都关着。灯泡得到的平均电压就是 1V,亮度很暗。
📊 典型应用场景
| 应用领域 | 工作原理 | 典型例子 |
|---|---|---|
| 电机调速 | 通过改变占空比来调节施加在电机两端的平均电压,从而控制转速。占空比越大,转速越快。 | 无人机螺旋桨、电风扇、电动玩具车 |
| LED调光 | 利用人眼的视觉暂留效应,当PWM频率足够高时(>80Hz),人眼感知到的是平均亮度。 | LED呼吸灯、台灯亮度调节、屏幕背光 |
| 电源管理 | 在开关电源中,通过PWM控制功率管的开关,实现高效的电压转换。 | 手机充电器、DC-DC降压模块 |
| 音频生成 | 通过快速变化的PWM占空比来模拟声波波形,驱动蜂鸣器或扬声器。 | 电子琴、报警器 |
📌一句话总结
PWM是一种通过高速开关 和调节占空比 ,用数字信号来等效模拟电压的技术,它让单片机能够高效、精确地控制电机速度、灯光亮度等模拟设备。
注:文章随手记录,如有错误,评论区交流