当前位置: 首页 > news >正文

【stm32】GPIO输入

GPIO输入

按键介绍

常见输入设备,按下导通,松手断开
按键抖动:由于案件内部使用的是机械式弹簧片来进行通断,在按下和松手的瞬间会伴有一连串抖动
在这里插入图片描述

传感器介绍

传感器元件(光敏电阻/热敏电阻/红外接收管等)的电阻会随外界模拟量的变化而变化,通过与定值电阻串联分压即可得到模拟电压输出,再通过电压比较器进行二值化即可得到数字电压输出
在这里插入图片描述
在这里插入图片描述

C2滤波电容,给中间的电压输出进行滤波,滤除一些干扰,保证输出电压波形平滑
在电路里遇到一端接在电路中,另一端接地的电容,考虑是否为滤波电容,若是,则不是电路主要框架,在分析电路的时候,可以先将其抹掉,使分析更加简单

去掉滤波电容之后,构成了基本的分压电路
N1阻值变小时,下拉作用增强,中间AO段的电压就会拉低,极端情况下,N1阻值为0,AO输出被完全下拉,输出0V;反之N1阻值变大时,上拉作用增强,中间AO段的电压就会拉高,极端情况下,相当于断路,输出电压R1拉高至VCC(上下拉电阻)
若阻值为0,则拉力无穷大,若上下阻值均为0,电源短路,应避免这个情况
在这里插入图片描述

二值化是通过芯片LM393完成
LM393,电压比较器芯片,里面有两个独立的电压比较器电路,相当于运算放大器,当同相输入端大于反向输入端的电压时,输出会瞬间升高为最大值,就是输出接VCC;反之输出瞬间降为最小值,也就是输出接GND

应用:同相输入端IN+接到AO模拟电压端,IN-接电位器,电位器揭发也为分压电阻原理,拧动电位器,IN-就会生成一个可调的阈值电压,两个电压比较,最终输出结果就是DO,数字电压输出,DO接到引脚的输出端

在这里插入图片描述
左边为电源指示灯,通电就亮;右边为DO输出指示灯,可以指示DO的输出电平,低电平点亮,高电平熄灭
R5上拉电阻,保证默认输出为高电平

在这里插入图片描述

对于光敏传感器来说,N1为光敏电阻
对于热敏传感器来说,N1为热敏电阻
对于红外传感器来说,N1为红外接收管,此外还会多一个点亮红外发射管的电路
在这里插入图片描述
发射管发射红外光,接收管接受红外光,模拟电压表示接收光的强度,电位器换成了两个电阻分压,这样数字输出就是固定阈值的二值化,通常用来检测通断,故阈值不需过多调整
最后有个也是红外发射管和接收管,但其是向下发射红外光,然后检测反射光,可用来做寻迹小车

按键和传感器硬件电路

在这里插入图片描述
上面两个为下接按键的方式,下面两个为上接按键的方式,一般来说按键都是用下接的方式,原因跟LED接法类似,是电路设计的习惯和规范

图一
为按键最常用接法,当按键按下时,PA0被直接下拉到GND,此时读取PA0口的电压就是低电平,当按键松开时,PA0被悬空,会导致引脚电压不确定,故这种接法下,要求PA0是上拉输入的模式,此时按下为低电平,松开为高电平

图二
相较于图一,外部接了一个上拉电阻,按键松开时,引脚由于上拉作用,保持高电平;按键按下时,引脚接GND,为低电平,此时PA0引脚可配置为浮空输入或上拉输入,若为上拉输入,为内外两个上拉电阻共同作用,高电平会更强一些,更稳定,但,当引脚被强行拉到低时,损耗也会大些·

图三
要求PA0必须配置成下拉输入,按键按下时,引脚为高电平;松开时,引脚回到默认值低电平,一般单片机不一定有下拉输入的模式,故最好使用上面接法

图四
PA0需要配置成下拉输入模式或浮空输入模式

传感器模块电路:
在这里插入图片描述

c语言相关知识点复习

数据类型

在这里插入图片描述
char本意是字符型数据的意思,但单片机通常用它存放整数而不是字符

宏定义

#define
用途:用一个字符串代替一个数字,便于理解,防止出错;提取程序中经常出现的参数,便于快速修改
定义宏定义如:#define ABC 12345
引用宏定义如:int a = ABC;//等效于int a = 12345

typedef

用途:将一个比较长的变量类型换个名字,便于使用
定义typedef:

typedef unsigned char uint8_t

引用typedef:

uint8_t a;//等效于unsigned char a

枚举enum

用途:定义一个取值受限制的整型变量,用于限制变量取值范围;宏定义的结合
定义枚举变量:

enum{FALSE = 0, TRUE = 1} EnumName;

因为枚举变量类型较长,所以通常用typedef更改变量类型名
引用枚举成员:

EnumName = FALSE;
EnumName = TRUE;

注;本文来源为江协b站课程,为笔记

http://www.lryc.cn/news/609130.html

相关文章:

  • 环绕字符串中的唯一子字符串-动态规划
  • 其它IO函数
  • STM32 串口发送
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘scikit-learn’问题
  • Linux环境下使用Docker搭建多服务环境
  • 学习游戏制作记录(实现克隆攻击的克隆复制和水晶代替克隆)8.3
  • 【gradle】插件那些事
  • 7.28-8.3周报
  • C的数据类型与变量
  • 高质量数据集|从武汉光谷《面向科技情报大模型的高质量数据集建设》招标项目谈起
  • Matlab算法编程示例4:数值解法求解常微分方程的代码实例
  • deep research|从搜索引擎到搜索助手的实践(一)
  • Android 之 MVC架构
  • TVS二极管数据手册解读
  • kraft的设计与实现
  • 【数据结构】队列的顺序存储与链式存储(C语言版)
  • 深度学习中的模型知识蒸馏
  • 【Bluetooth】【Transport层篇】第三章 基础的串口(UART)通信
  • 文本换行问题
  • Jetson Orin NX/NANO+ubuntu22.04+humble+MAVROS2安装教程
  • 【从零开始学习Redis】初识Redis
  • [Oracle] DUAL数据表
  • CAP 理论笔记
  • 推荐系统学习笔记(九)曝光过滤 Bloom Filter
  • 【领域热点】【Vue】Vue 与 WebAssembly:前端性能优化的黄金搭档
  • 自动驾驶中的传感器技术18——Camera(9)
  • Connection refused: no further information: localhost/127.0.0.1:2375
  • docker 可用镜像列表(长期免费)
  • Azure DevOps — Kubernetes 上的自托管代理 — 第 4 部分
  • Docker环境离线安卓安装指南