LED 底层原理 和 GPIO引脚、寄存器操作

简介: LED 底层原理 和 GPIO引脚、寄存器操作

前言

最近跟着韦东山老师的课程学习驱动基础知识,韦东山老师讲的非常好,大家想深入学习驱动知识的可以去看看韦东山老师的驱动教学视频。


一、LED 原理

当我们学习 C 语言的时候,我们会写个 Hello 程序。


那当我们写 ARM 程序,也该有一个简单的程序引领我们入门,这个程序就是点亮 LED。


我们怎样去点亮一个 LED 呢?分为三步:


第1步 看原理图,确定控制 LED 的引脚;


第2步 看主芯片的芯片手册,确定如何设置控制这个引脚;


第3步 写程序;


先来讲讲怎么看原理图


LED 样子有很多种,像插脚的,贴片的。

cd9cc3b04728636f827ba4d282d5dc20_1118428b23e74716acb3cd4c84a1c473.png

它们长得完全不一样,因此我们在原理图中将它抽象出来。

点亮 LED 需要通电源,同时为了保护 LED,加个电阻减小电流。

控制 LED 灯的亮灭,可以手动开关 LED,但在电子系统中,不可能让人来控制开关,通过编程,利用芯片的引脚去控制开关。


二、LED 的驱动方式

常见的有四种。


  • 使用引脚输出 3.3V 点亮 LED,输出 0V 熄灭 LED。
  • 使用引脚拉低到 0V 点亮 LED,输出 3.3V 熄灭 LED。 有的芯片为了省电等原因,其引脚驱动能力不足,这时可以使用三极管驱动。
  • 使用引脚输出 1.2V 点亮 LED,输出 0V 熄灭 LED。
  • 使用引脚输出 0V 点亮 LED,输出 1.2V 熄灭 LED。

由此,主芯片引脚输出高电平/低电平,即可改变 LED 状态,而无需关注 GPIO 引脚输出的是 3.3V 还是 1.2V。所以简称输出 1 或 0:

  • 逻辑 1-->高电平
  • 逻辑 0-->低电平


三、普适的 GPIO 引脚操作方法

GPIO: General-purpose input/output,通用的输入输出口


GPIO 模块一般结构


  • 有多组 GPIO,每组有多个 GPIO
  • 使能:电源/时钟
  • 模式(Mode):引脚可用于 GPIO 或其他功能
  • 方向:引脚 Mode 设置为 GPIO 时,可以继续设置它是输出引脚,还是输入引脚
  • 数值:
  • 对于输出引脚,可以设置寄存器让它输出高、低电平
  • 对于输入引脚,可以读取寄存器得到引脚的当前电平

四、GPIO 寄存器操作

芯片手册一般有相关章节,用来介绍:power/clock


  • 可以设置对应寄存器使能某个 GPIO 模块(Module)
  • 有些芯片的 GPIO 是没有使能开关的,即它总是使能的

一个引脚可以用于 GPIO、串口、USB 或其他功能


  • 有对应的寄存器来选择引脚的功能

对于已经设置为 GPIO 功能的引脚,有方向寄存器用来设置它的方向:输出、 输入


对于已经设置为 GPIO 功能的引脚,有数据寄存器用来写、读引脚电平状态 GPIO 寄存器的 2 种操作方法:原则:不能影响到其他位

(1)直接读写:读出、修改对应位、写入

       a) 要设置 bit n:

1. val = data_reg;
2. val = val | (1<<n);
3. data_reg = val;

       b) 要清除 bit n:

val = data_reg;
val = val & ~(1<<n);
data_reg = val;

(2)set-and-clear protocol:


set_reg, clr_reg, data_reg 三个寄存器对应的是同一个物理寄存器


a) 要设置 bit n:set_reg = (1<<n);


b) 要清除 bit n:clr_reg  = (1<<n);

相关文章
|
2月前
|
Linux 芯片
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯-1
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯-1
|
2月前
|
Ubuntu Linux
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯-2
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯
Linux驱动入门 —— 利用寄存器操作GPIO进行LED点灯-2
|
19天前
经验大分享:STM32F4寄存器初始化系列:GPIO
经验大分享:STM32F4寄存器初始化系列:GPIO
10 0
|
2月前
|
Linux 芯片 Ubuntu
Linux驱动入门 —— 利用引脚号操作GPIO进行LED点灯
Linux驱动入门 —— 利用引脚号操作GPIO进行LED点灯
|
计算机视觉
树莓派开发笔记(五):GPIO引脚介绍和GPIO的输入输出使用(驱动LED灯、检测按键)
树莓派开发笔记(五):GPIO引脚介绍和GPIO的输入输出使用(驱动LED灯、检测按键)
树莓派开发笔记(五):GPIO引脚介绍和GPIO的输入输出使用(驱动LED灯、检测按键)
【STM32】引脚GPIO输出操作点亮一颗LED
【STM32】引脚GPIO输出操作点亮一颗LED
102 0
stm32使用HAL库函数使LED灯闪烁
stm32使用HAL库函数使LED灯闪烁
225 0
STM32使用寄存器通过控制GPIO点亮一盏灯
STM32使用寄存器通过控制GPIO点亮一盏灯
82 0
STM32使用寄存器通过控制GPIO点亮一盏灯
|
编译器 C语言
STM32学习笔记(1) GPIO初始化及点亮LED
在这一段代码中,假设同时有A.h和B.h同时包含了这个头文件,在编译器编译A时,会先判断LED.H有没有被定义(这里肯定是未被定义的),那么就定义(define __LED_H),然后再(endif),在编译器编译B时,同样会判断LED.H有没有被定义(这里经过A的编译,肯定是被定义的),那么就直接(endif)。这样,就可以防止重复编译。
229 0
STM32控制GPIO完成点亮LED灯
STM32控制GPIO完成点亮LED灯
294 0
STM32控制GPIO完成点亮LED灯