stm32HAL_GPIO输入

news2024/11/15 14:04:20
学会使用 GPIO 采集 KEY 的数据信息,这种信息采集技术在生活中常见于对大自
然环境的各种信息的采集。比如环境温度,湿度等等。我们这里以 key 为入门设
备。
一,什么是信息采集
比如环境温度,湿度等等。我们需要把这些温度,湿度的数值以传感器转换为电
流或者电压数值。这些电流数值或者电压数值进过 GPIO 传输到芯片内部,芯片

感受到电流

.GPIO 的输入控制与原理
输入:我们以开关( key )为入门设备,学习 GPIO 的信息采集

或者电压数值的变化从而反推环境中电压电流数值。

2.1KEY 硬件原理如图:
看上图:结论当 PA0 采集到高电平信号时候,认为按键 KEY 触发。
                      当 PE2 采集到低电平信号的时候,认为按键 KEY 触发。
输入输出,这里的输入指的是 信息流 输入 到芯片里。输出是指 信息流输
出到芯片外面。是信息流的方向,而不是 电流方向。
2.2.2 原理图搜索 key0,key1,key2
key 图得出结论:
找到 KEY0 对应引脚号 PE4, 而且 低电平 为触发信号。 KEY1 KEY2 可以等同。
最关键的结论:当开关按下去的时候,引脚接地为低电平,当采集到低信号的时
候,就知道开关按下去了。
结果 : 确认 key0 连接引脚 PE4,key1 连接引脚 PE3,key2 连接引脚 PE2,
得到结果 :PE4 解释 gpio 引脚第 E 组的第 4 个成员。
组号: GPIOE
成员号: GPIO_Pin_4/GPIO_Pin_2/GPIO_Pin_3/
2.3 编码实现
2.3.1 代码程序流程图。
2.3.2 ;流程图第一步时钟使能函数
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph,NewState);
RCC_AHB2PeriphClockCmd(RCC_AHB2Periph, NewState);
RCC_AHB3PeriphClockCmd(RCC_AHB3Periph,NewState);
RCC_APB1PeriphClockCmd( RCC_APB1Periph, NewState);
RCC_APB2PeriphClockCmd(RCC_APB2Periph, NewState);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
函数解释:让第 F 组成员都有时钟控制。没有这个时钟信号,都无法工作。
参数 1:RCC_AHB1Periph_GPIOF, 选择第几组。 参数 2 DISABLE/ENABLE
2.3.3 流程图第二部 GPIO 基本配置:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
函数解释:让程序决定第几组第几根引脚,如何工作。 参数 1 GPIOx :第几
组, 说明:查看确认引脚号,例如 PF9, 对应组为: GPIOF 。 参数 2 :第几根,如
何干活。
GPIO_InitTypeDef key_gpio_initstruct;
key_gpio_initstruct.GPIO_Mode = GPIO_Mode_IN;
// 输入输出类型: GPIO_Mode_IN/GPIO_Mode_OUT/
key_gpio_initstruct.GPIO_OType = GPIO_OType_OD;
// 推挽还是开漏 GPIO_OType_PP/GPIO_OType_OD
key_gpio_initstruct.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_3;
// 引脚编号,说明是第几根引脚。
key_gpio_initstruct.GPIO_PuPd = GPIO_PuPd_UP;
// 上拉电阻还是下拉电阻
key_gpio_initstruct.GPIO_Speed = GPIO_High_Speed;
// 引脚的最高反应速度,默认最高就好了
GPIO_Init(GPIOE,&key_gpio_initstuct);
key_gpio_initstruct.GPIO_PuPd = GPIO_PuPd_UP;
该项配置需要与有效信号相反。有效信号为低,决定默认信号为高。用于区分开
关两种状态。
GPIO_PuPd_NOPULL: 默认信号高低都是触发信号。
GPIO_PuPd_UP: 默认高电
平,触发低电压为有效。
GPIO_PuPd_DOWN: 默认低信号,触发高电平有效。
2.3.4 :流程图第三步 GPIO 基本操作,电平数值读取:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t
GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
key = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4);
函数:读取一根引脚的电平。以返回值形式给出。
参数 1 :第几组, GPIOE 说明
E 组成员。
参数 2 :第几个成员。 GPIO_pin_4 说明的第 4 个。
返回值:高电平
1 ,低电平为 0

 

翻转 LED 灯:
由于引脚默认为高电平,读取的数值为 1
请默认 LED 灯 为灭。
当电平信号为
低电平,数值 0.
请点亮 LED. 请自行观察 LED 灯,证明 KEY 正常工作。
4.4 完成代码整体展示:
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
GPIO_InitTypeDef key_gpio_initstruct;
key_gpio_initstruct.GPIO_Mode = GPIO_Mode_IN;
key_gpio_initstruct.GPIO_OType = GPIO_OType_OD;
key_gpio_initstruct.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_3;
key_gpio_initstruct.GPIO_PuPd = GPIO_PuPd_UP;
key_gpio_initstruct.GPIO_Speed = GPIO_High_Speed;
GPIO_Init(GPIOE,&key_gpio_initstruct);
while(1)
{
key = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4);
key1 = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3);
if (key1 == 0)
{
led0(0);
}
key1 = 1;
led0(1);
if (key == 0)
{
led1(0);
}
key = 1;
led1(1);
}

 

总结一下:
GPIO 四种输出模式:
开漏输出 推挽输出 开漏复用输出 推挽复用输出
GPIO 四种输入模式: 输入上拉 输入下拉 浮空输入,模拟输入
GPIO 有总共上面八种模式

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

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

相关文章

Spire.PDF for .NET【文档操作】演示:更改 PDF 版本

在某些平台上上传或提交 PDF 文件时,您有时会面临平台需要特定版本的 PDF 文件的困境。如果您的PDF文件无法满足要求,则需要将其转换为不同版本以实现兼容性。本文将演示如何使用Spire.PDF for .NET以编程方式在不同版本之间转换 PDF。 Spire.PDF for .…

探秘数据库中间件:ProxySQL与MaxScale的优势与劣势

欢迎来到我的博客,代码的世界里,每一行都是一个故事 探秘数据库中间件:ProxySQL与MaxScale的优势与劣势 前言功能对比负载均衡故障转移查询路由使用场景和业务需求下的选择建议 性能对比响应速度并发连接数不同负载条件下的性能表现 高可用性…

R语言绘制动态网络图Network教程WGCNA

今天分享的笔记是使用NetworkD3对WGCNA的共表达网络进行可视化,创建交互式动态网络图,展示基因之间的相互关系,可以用于转录组或者其他调控网络展示。 加权基因共表达网络分析 (WGCNA, Weighted correlation network analysis)是用来描述不同…

大语言模型(LLM)漏洞爆发,AI模型无一幸免

本文概述了人工智能初创公司Anthropic于2024年04月03日发表的一篇针对人工智能安全的论文,该公司在本论文中宣布的一种新的“越狱”技术,名为Many-shot Jailbreaking(多轮越狱)。文章详细描述了目前大语言模型(LLM&…

AI大模型探索之路-实战篇2:基于CVP架构-企业级知识库实战落地

目录 前言 一、概述 二、本地知识库需求分析 1. 知识库场景分析 2. 知识库应用特点 3. 知识库核心功能 三、本地知识库架构设计 1. RAG架构分析 2. 大模型方案选型 3. 应用技术架构选型 4. 向量数据库选型 5. 模型选型 三、本地知识库RAG评估 四、本地知识库代码落地 1. 文件…

Godot3D学习笔记1——界面布局简介

创建完成项目之后可以看到如下界面: Godot引擎也是场景式编程,这里的一个场景相当于一个关卡。 这里我们点击左侧“3D场景”按钮创建一个3D场景,现在在中间的画面中会出现一个球。在左侧节点视图中选中“Node3D”,右键创建子节点…

day_8题解

利用最大公约数求最小公倍数 #include<iostream> using namespace std;int gcd(int a,int b) {return b?gcd(b,a%b):a; }int main() {long long a,b;cin>>a>>b;long long ansgcd(a,b);cout<<(a*b)/ans<<endl;return 0; }排序遍历&#xff0c;记…

国内开通chatgpt plus会员方法

ChatGPT镜像 今天在知乎看到一个问题&#xff1a;“平民不参与内测的话没有账号还有机会使用ChatGPT吗&#xff1f;” 从去年GPT大火到现在&#xff0c;关于GPT的消息铺天盖地&#xff0c;真要有心想要去用&#xff0c;途径很多&#xff0c;别的不说&#xff0c;国内GPT的镜像…

excel中怎么用乘法、加法来替代AND和OR函数

你可以使用乘法和加法来替代Excel中的AND和OR函数&#xff0c;虽然这样做可能会增加公式的复杂度&#xff0c;但在某些情况下是可行的。 1. 使用乘法替代AND函数&#xff1a;AND函数用于判断一系列条件是否同时成立&#xff0c;如果所有条件都为TRUE&#xff0c;则返回TRUE&…

高通发布电脑CPU,比英特尔Ultra9领先51%

要说2024年最热门的关键词&#xff0c;那肯定非 AI 莫属&#xff0c;当前 AI 已经开始深入各行各业&#xff0c;AI 电视、AI 手机、AI 车机、AI 家电&#xff0c;以及 AI PC ,这些都意味着 AI 将对各个行业带来的新风向和不小的冲击。 2024 年了&#xff0c;PC 处理器还能卷出什…

idea2019.3.5版本安装配置

安装 下载地址&#xff1a;https://www.jetbrains.com/idea/download/other.html 配置idea缓存文件位置 注意&#xff1a;为了避免后续的麻烦&#xff0c;此步骤必须为安装或者重装idea的第一步骤&#xff01;&#xff01;&#xff01; 注意&#xff1a;为了避免后续的麻烦&…

Android Studio开发工具学习之Git远程仓库拉取与推送

Git远程仓库操作 1.1 推送项目到远端服务器1.1.1 进入Gitee或Github、创建一个新的仓库1.1.2 将Android Studio中项目推送至Gitee 1.2 从远端服务器拉取项目1.2.1 AS工程页拉取新项目1.2.2 AS启动页拉取项目 1.1 推送项目到远端服务器 1.1.1 进入Gitee或Github、创建一个新的仓…

Redis 如何实现分布式锁

课程地址 单机 Redis naive 版 加锁&#xff1a; SETNX ${lockName} ${value} # set if not exist如果不存在则插入成功&#xff0c;返回 1&#xff0c;加锁成功&#xff1b;否则返回 0&#xff0c;加锁失败 解锁&#xff1a; DEL ${lockName}问题1 2 个线程 A、B&#…

实验 1--SQL Server2008数据库开发环境

文章目录 实验 1--SQL Server2008数据库开发环境2.4.1 实验目的2.4.2 实验准备2.4.3 实验内容1.利用 SSMS 访问系统自带的Report Server 数据库。2.熟悉了解 SMSS对象资源管理器树形菜单相关选择项的功能。(1)右键单击数据库Report Server&#xff0c;查看并使用相关功能;(2)选…

ubuntu系统安装配置gitlab+Jenkins+发布持续集成持续部署保姆级教程。

1、服务器环境 名称 系统 IP 备注 gitlab ubuntu20.04.2图形化 192.168.26.130 要求有6G的内存 Jenkins Ubuntu20.04.2图形化 …

物联网配网工具多元化助力腾飞——智能连接,畅享未来

随着物联网技术的迅猛发展&#xff0c;智能插座、蓝牙网关作为其中常见的智能物联设备&#xff0c;无论是功能还是外观都有很大的改进&#xff0c;在智能化越来越普遍的情况下&#xff0c;它们的应用场景也在不断拓宽。对于智能设备而言&#xff0c;配网方式的选择对于设备的成…

vscode ssh远程连接服务器,一直正在下载vscode服务器的解决办法

前言 为方便描述&#xff0c;在本教程中&#xff0c;发起远程连接的叫“主机”&#xff0c;被远程连接的叫“服务器”。 正文 如果主机是首次用vscode远程连接服务器&#xff0c;会在服务器上自动下载vscode服务器&#xff0c;但有时候因为网络问题&#xff0c;会卡在&#xff…

Python 网络与并发编程(一)

文章目录 并发编程介绍串行、并行与并发的区别进程、线程、协程的区别进程线程协程 并发编程解决方案同步和异步介绍 并发编程介绍 串行、并行与并发的区别 有任务A、B、C&#xff0c;一个CPU去执行他们&#xff0c;有几种方式 1、一个cpu按顺序执行ABC&#xff0c;这就是串行…

ThingsBoard教程(二十九):详细讲解在tb平台下 http协议下的客户端rpc,服务的rpc的使用

客户端rpc 先来说一下简单的客户端rpc, 客户端发起rpc请求,只需要使用post方法调用该接口即可以 http://host:port/api/v1/$ACCESS_TOKEN/rpc请求路径中间的参数 ACCESS_TOKEN 必须是设备的访问令牌。 请求携带的参数如下,二个参数method和params {"method": …

创建Maven项目的时候让选择maven模板

创建Maven项目的时候让选择maven模板 心得 工欲利其事 必先利其器。如果你想要干成一件事 那么必须先要精通对应的工具使用。之前我不太注重工具 我觉得只要代码写的好就可以了 但是当我们了解了产品经理的一些思想之后&#xff0c;我才明白一个好的产品是可以给用户提供多大…