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

news2024/11/15 8:44:51

目录

LED 原理

LED 的驱动方式

普适的 GPIO 引脚操作方法

GPIO 寄存器操作


LED 原理

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

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

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

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

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

第3步 写程序;

先来讲讲怎么看原理图

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

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

点亮 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:

val = data_reg;
val = val | (1<<n);
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);

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HNU-计算机网络-实验4-网络层与链路层协议分析(PacketTracer)

计算机网络 课程基础实验四网络层与链路层协议分析&#xff08;PacketTracer&#xff09; 计科210X 甘晴void 202108010XXX 文章目录 计算机网络 课程基础实验四<br>网络层与链路层协议分析&#xff08;PacketTracer&#xff09;一、实验目的二、实验内容4.1 路由器交换…

【基于Python的信用卡客户历史数据分析与挖掘】

基于Python的信用卡客户历史数据分析与挖掘 前言技术栈数据获取与预处理描述性分析建立预测模型模型评估与结果展示Web应用搭建结语 前言 随着金融科技的迅猛发展&#xff0c;信用卡客户的历史数据分析变得越来越重要。本文将介绍如何使用Python、Sklearn和Flask对公开数据集进…

1.1 【应用开发】应用开发简介

写在前面 Screen图形子系统基于客户端/服务器模型&#xff0c;其中应用程序是请求图形服务的客户端&#xff08;Screen&#xff09;。它包括一个合成窗口系统作为这些服务之一&#xff0c;这意味着所有应用程序渲染都是在离屏缓冲区上执行的&#xff0c;然后可以在稍后用于更新…

SpringBoot+Redis 10分钟搞定海量重复提交问题

前言 在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求&#xff0c;我们来解释一下幂等的概念&#xff1a;任意多次执行所产生的影响均与一次执行的影响相同。按照这个含义&#xff0c;最终的含义就是 对数据库的影响只能是一次性的&#xff0c;不能重复处理。如何…

BFC — 张天禹

文章目录 学习链接BFC1. 什么是BFCW3C 上对 BFC 的定义MDN 上对 BFC 的描述更加通俗的描述 2. 开启了BFC能解决什么问题3. 如何开启BFC 演示演示1子元素margin塌陷问题使用BFC解决问题完美解决塌陷问题 演示2被浮动元素覆盖问题使用BFC解决问题例1例2例3例4延申&#xff08;左右…

LeetCode 2415. 反转二叉树的奇数层:深度优先搜索(DFS)

【LetMeFly】2415.反转二叉树的奇数层&#xff1a;深度优先搜索(DFS) 力扣题目链接&#xff1a;https://leetcode.cn/problems/reverse-odd-levels-of-binary-tree/ 给你一棵 完美 二叉树的根节点 root &#xff0c;请你反转这棵树中每个 奇数 层的节点值。 例如&#xff0c…

leetcode面试经典二分系列刷题心得

闲来无事巩固算法基础&#xff0c;发现自己的二分几乎从来没系统刷过题&#xff0c;基础很是薄弱。 二分法不愧称为新人杀手&#xff0c;刷起来很是吃力&#xff0c;感觉明明学了几套二分模板&#xff0c;但是却不知道如何去运用&#xff0c;很多读者在初次尝试刷二分题时候&a…

“你基础不太行啊”

一、创建对象的五种方式 直接new关键字反序列化clone反射class.newInstance反射class.getConstructor 1.1、直接new关键字 1.2、Clone &#xff08;需要实现Cloneable接口&#xff09; 1.3、反射class.newInstance 1.4、反射class.getConstructor 1.5、反序列化 二、与equals…

bottom-up-attention-vqa-master 成功复现!!!

代码地址 1、create_dictionary.py 建立词典和使用预训练的glove向量 &#xff08;1&#xff09;create_dictionary() 遍历每个question文件取出所关注的question部分&#xff0c;qs 遍历qs&#xff0c;对每个问题的文本内容进行分词&#xff0c;并将分词结果添加到字典中&…

小红书商品详情API:电商助力

一、引言 随着互联网的普及和电商行业的快速发展&#xff0c;消费者对于商品信息的获取方式也在不断变化。小红书作为一款以内容分享为主的社交电商平台&#xff0c;吸引了大量用户。为了满足用户对商品信息的快速获取需求&#xff0c;小红书提供了商品详情API接口。本文将探讨…

离散型概率密度函数的分布列⇔分布函数

目录 一、super误区 1.分布函数的定义 二、分布列⇒分布函数 二、分布列⇐分布函数 一、super误区 我在读定义的时候陷入了一个误区&#xff0c;与大家分享一下。 1.分布函数的定义 由于是离散型的概率密度函数&#xff0c;我把他抽象到数轴上理解&#xff1a; 如下分布…

线程的介绍

首先我们来了解一下线程是什么&#xff1a; 首先我们介绍一下程序是什么&#xff1f;程序就是我们编写的代码就叫程序&#xff0c;当我们程序运行的时候则称为进程&#xff0c;在我们现实生活中哪些用到了进程&#xff0c;就比如说我们qq&#xff0c;微信&#xff0c;百度网盘…

兼容性测试:确保系统在各种环境中正常运行

随着数字化时代的到来&#xff0c;软件应用在不同的设备、操作系统和浏览器上运行的需求变得日益重要。为了确保用户体验的一致性和系统的稳定性&#xff0c;兼容性测试变得至关重要。本文将介绍如何使用兼容性测试&#xff0c;以保证软件在各种环境中无缝运行。 1. 确定目标平…

ssl证书问题导致本地启动前端服务报500

报错如下&#xff1a;注意查看报错信息 问题&#xff1a;系统原是http&#xff0c;后台调整为https后&#xff0c;ssl证书有点问题&#xff0c; vue项目本地服务&#xff0c;使用代理&#xff0c;webpack默认&#xff0c;证书强校验&#xff0c;导致请求无法发出&#xff0c;后…

Linear classifiers——线性分类器

1.(Generalized) Linear classifiers——广义线性分类器 1.1 模型 假如有两类数据&#xff0c;类别标签为y 1和y -1 我们可以使用一个线性函数将其分类&#xff0c;二维形式 通常x增加一个恒等于1的维度&#xff0c;可以将b合并进w&#xff0c;于是更一般的形式为 ,就相当于…

centos离线安装mosquitto

1.x86_64架构centos7操作系统mosquitto包 本次真正要安装的机器是x86_64架构的AMD Ryzen 3 &#xff0c;操作系统是centos7 先找一台能联网的centos7机器 添加 EPEL 软件库 yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm下载rpm包 …

C++使用UDP

C使用UDP 对C使用UDP做了简单封装&#xff0c;可直接运行 头文件udp.h #pragma once #include <Winsock.h> #pragma comment(lib,"WS2_32.lib")#define LOCAL_IP_ADDR INADDR_ANY //当前应用程序接收的IP地址 #define LOCAL_PORT 9527 …

PixPin带有截图/贴图/长截图/文字识别/标注的截图工具,很好用

官网地址&#xff1a;PixPin 截图/贴图/长截图/文字识别/标注 | PixPin 截图/贴图/长截图/文字识别/标注 确实挺好用的&#xff0c;推荐一下

UE4 实用材质图形

渐变圆 光晕效果&#xff1a; 十字光晕&#xff1a;

1840_emacs org-mode babel的语言支持

Grey 全部学习内容汇总&#xff1a; GitHub - GreyZhang/g_org: my learning trip for org-mode 1840_emacs org-mode babel的语言支持 主题由来介绍 Babel是org-mode中支持文学式编程以及可重现研究的一个核心模块&#xff0c;之前看过这个插件的优点是功能完善且支持的语…