stm32HAL_GPIO输入

学会使用 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.hqwc.cn/news/640608.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux thermal框架介绍

RK3568温控 cat /sys/class/thermal/thermal_zone0/temp cat /sys/class/thermal/thermal_zone1/temp cat /sys/class/thermal/cooling_device0/cur_state cat /sys/class/thermal/cooling_device1/cur_state cat /sys/class/thermal/cooling_device2/cur_state thermal_zone…

Cloud微服务:Ribbon负载均衡

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Ribbon负载均衡 一、Ribbon - 负载均衡原理、流…

Oracle进阶(2)——物化视图案例延伸以及序列、同义词

一、物化视图 物化视图(Materialized View)是 Oracle 数据库中的一个对象,它是一个预先计算和存储的查询结果集,类似于视图,但与视图不同的是,物化视图会将查询结果保存在物理存储中,而不是动态…

WPF2022终结版系列课程笔记 1 WPF 基本布局

本笔记为B站 微软系列技术教程 WPF项目实战合集(2022终结版) 项目记录 WPF 基本布局 WPF布局原则 一个窗口中只能包含一个元素 不应显示设置元素尺寸 不应使用坐标设置元素的位置 可以嵌套布局容器 WPF布局容器 StackPanel: 水平或垂直排列元素、Orientation属性分别: Hor…

STP学习的第一篇

1.STP的基本概念:根桥 (1)STP的主要作用之一是在整个交换网络中计算出一棵无环的“树”(STP树)。 (2)根桥是一个STP交换网络中的“树根”。 (3)STP开始工作后&#xf…

K8s: Ingress对象, 创建Ingress控制器, 创建Ingress资源并暴露服务

Ingress对象 1 )概述 Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTPIngress-nginx 本质是网关,当你请求 abc.com/service/a, Ingress 就把对应的地址转发给你,底层运行了一个 nginx但 K8s 为什么不…

OpenCV-基于阴影勾勒的图纸清晰度增强算法

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 实现原理 大家在工作和学习中,无论是写报告还是论文,经常有截图的需求,比如图表、图纸等&…

无人驾驶 自动驾驶汽车 环境感知 精准定位 决策与规划 控制与执行 高精地图与车联网V2X 深度神经网络学习 深度强化学习 Apollo

无人驾驶 百度apollo课程 1-5 百度apollo课程 6-8 七月在线 无人驾驶系列知识入门到提高 当今,自动驾驶技术已经成为整个汽车产业的最新发展方向。应用自动驾驶技术可以全面提升汽车驾驶的安全性、舒适性,满足更高层次的市场需求等。自动驾驶技术得益于人工智能技术的应用…

SpringBoot 根据不同环境切换不同文件路径

最简单的办法就是使用多个 application.yml 配置文件 。一个叫 application-test.yml 测试用;另一个是正式使用的 application-prod.yml 。win环境下大部分是开发测试时候使用的,服务正式上线需要部署在Linux服务器上又换成了Linux。但开发初期或者项目…

JS-47-Node.js06-fs模块-读写文件

Node.js内置的fs模块就是文件系统模块,负责读写文件。 和所有其它JavaScript模块不同的是,fs模块同时提供了异步和同步的方法。 一、回顾:异步方法VS同步方法 1-1、异步方法 因为JavaScript的单线程模型,执行IO操作时&#xff…

Linux及tmux、vim常用命令

Linux 关于Linux的简介、诞生、迭代,大家可以去网上查一查,这里不多做赘述了 Linux文件类型 非常重要的文件类型有: 普通文件,目录文件,链接文件,设备文件,管道文件,Socket 套接字文件 等。 …

【Leetcode每日一题】 分治 - 数组中的第K个最大元素(难度⭐⭐)(63)

1. 题目解析 题目链接:数组中的第K个最大元素 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 在快速排序算法中,一种常见的优化策略是将数组划分为三个区间。这种划分方式可以更加精确地定位到…