1.点亮一颗小小的LED

51单片机

51单片机------点亮LED

配置流程

① 确定LED的连接方式

为什么?

因为需要知道LED是接在单片机引脚的正极还是负极。

  • LED正极接IO口,负极接地 → 输出高电平点亮。
  • LED负极接IO口,正极接电源 → 输出低电平点亮。

所以第一步不是写代码,而是先分析硬件电路


② 找到对应的IO引脚

为什么?

只有操作连接LED的那个引脚,电平变化才能传递到LED。


③ 输出正确的电平

为什么?

LED本质上是二极管,只有形成电流回路才能发光。

根据连接方式选择输出高电平或低电平,使LED两端形成合适的电压差,电流流过LED,从而点亮。


为什么51如此简单?

因为 51单片机的硬件架构比较简单

  • 时钟系统简单。 上电后整个单片机使用统一的系统时钟,不需要像 STM32 那样为 GPIO、USART、ADC 等外设分别开启时钟。
  • GPIO 功能单一。 大多数 IO 上电后即可作为普通数字输入/输出使用,不需要配置工作模式。
  • 没有复杂的引脚复用机制。 一个引脚通常只有少量功能,不需要配置复用功能(AF)。

因此,点亮 LED 的流程非常直接:

分析硬件 → 找到 IO → 输出正确电平。

stm32

配置流程

①打开对应模块的时钟

  • 打开对应引脚对应GPIO时钟即可。

为什么?

打开对应模块时钟以后,该模块才能开始工作

因为 CPU 一直都是工作的。

只是:

复制代码
GPIO 没有时钟。
↓
GPIO寄存器不会响应。
↓
GPIO内部逻辑停止。
↓
所以操作GPIO没有效果。

STM32 将 CPU、GPIO、USART、TIM、ADC 等划分为多个独立的硬件模块,每个模块都需要时钟才能工作。为了降低功耗、提高资源利用率,这些模块的时钟默认可以独立控制,因此使用某个模块之前,需要先使能它的时钟。

绝大多数引脚都是按照GPIOA~GPIOX来进行分组划分,还有按照其他方式来进行划分。因此要使用哪个模块的引脚就需要去打开哪个模块的时钟,比如你要使用PA1,那就只需要打开GPIOA模块的时钟。这些模块的时钟开关都是单独存在,互不影响。这样做的好处就是:

  • 降低功耗,同时避免未使用外设无意义地运行

还有一个问题就是,stm32单片机中的一个引脚通常有大量复用功能,这些功能会针对不同的场景,比如会作为定时器的PWM输出或者是捕获,此时还需要打开这部分模块的时钟。


一个引脚通常有大量复用功能

真正可以这样理解:

GPIO 更像是一块交通枢纽。

例如:

PA9。

可以连接:

GPIO

USART1_TX

TIM1_CH2

I2C

...

这些模块都想使用 PA9。

那么:

到底是谁连接过去?

答案就是:

AF(Alternate Function)配置。

所以:

不是 GPIO 自己产生 PWM。

而是:

复制代码
TIM1 产生 PWM。
↓
AF把TIM1连接到PA9。
↓
PA9输出PWM。

这是很多初学者容易混淆的地方。

个人总结:

  • 一个GPIO引脚更像一个交通枢纽,它不仅只能单纯的输出高低电平和等待输入的高低电平,而是连接着功能模块,比如定时器、串口、I2C通信。比如PA9,到底是哪一个功能模块想连接过去,就需要AF配置,所以不是GPIO自己产生PWM,而是某个定时器产生PWM,AF把TIM1连接到PA9,然后PA9才输出PWM的

AI总结:

  • STM32 将不同的功能划分为多个独立的硬件模块,每个模块只有在获得时钟后才能工作。一个功能往往不是由某一个模块单独完成,而是由多个模块协同完成。例如输出 PWM,需要 GPIO 模块负责引脚输出、定时器模块负责产生 PWM 信号,两者都必须使能时钟并完成相应配置

从这里就可以看到了,打开对应模块时钟不仅仅只是针对从GPIOX中做选择了,还有许多模块

②配置工作模式

  • 配置高速输出模式
  • 推挽输出模式

为什么?

STM32的一个引脚所承载的功能远比51丰富。

例如一个 PA8 可能既可以是:

  • GPIO
  • USART
  • SPI
  • I2C
  • PWM
  • 输入捕获
  • MCO
  • ...

硬件不知道你到底想让它干什么。

因此需要你告诉它:

"今天你就是一个 GPIO 输出。"

所以,我们就需要单独针对,输入和输出来进行一个配置了。

假如引脚连接的是LED的负极:

就需要给LED输入低电平,站在单片机的视角上,就是单片机控制该引脚输出低电平,因此就得配置输出模式,在这里还可以选择输出的速度,有低速、中速、高速,我选择高速。但是事情到这里还没有结束

接下来还需要选择具体输出模式,有四种:

  • 推挽输出
  • 开漏输出
  • 复用推挽输出
  • 复用开漏输出

先不看复用,就从开漏和推挽展开,这样去理解:

推挽,就是说1不2,输出高电平就是高电平,输出低电平就是低电平,它的驱动比较稳定。

开漏,通常会有一个默认输出电平,然后通过某个触发开关,让它输出电平发生变化,关掉这个开关就会恢复默认输出电平。

试着反问:如果使用开漏会出现一个怎样的情况?

  • 输出高电平的时候,其实并没有真正的输出高电平
  • 只是将MOS管断开
  • 如果没有外部上拉,LED就不会工作。

所以我需要的是一个能够主动输出高、低电平,而不是要去依赖外部

③控制对应引脚输出正确电平

为什么?

LED本质上是二极管,只有形成电流回路才能发光。

相关推荐
KaifuZeng5 小时前
通信与接口协议面试八、CAN通信
单片机·嵌入式硬件·面试·通信与接口协议
智源单片机设计6 小时前
基于单片机的直流电机双闭环调速系统设计
单片机·嵌入式硬件
wuyk55520 小时前
24. C 语言模块化:不是拆几个.c 文件那么简单
c语言·开发语言·stm32·单片机
☆cwlulu21 小时前
调试排查工具介绍(gdb、strace、Valgrind等)
开发语言·c++·嵌入式硬件·ubuntu
lzqrzpt1 天前
LED驱动电源选型标准与工程应用技术要点解析
python·单片机·嵌入式硬件·物联网
木子单片机1 天前
基于51单片机的音乐彩灯设计
单片机·嵌入式硬件·51单片机·keil
hongmai6668881 天前
ESP32-S2-MINI-2U-N4R2:一款为灵活部署而生的Wi-Fi MCU模组
人工智能·单片机·嵌入式硬件·物联网·智能家居
熙芯XiChip1 天前
Modbus-RTU帧结构与功能码解析
单片机
电子工程师成长日记-C511 天前
51单片机录音笔(带闹钟)
单片机·嵌入式硬件·51单片机