3.3 GPIO输入
迪丽瓦拉
2024-05-29 08:28:11
0
  1. 按键

1.1 按键介绍

•按键:常见的输入设备,按下导通,松手断开

•按键抖动:由于按键内部使用的是机械式弹簧片来进行通断的,所以在按下和松手的瞬间会伴随有一连串的抖动

1.2 按键的四种接法

P1是最常用的接法,p1中按键按下为低电平,但必须要求是上拉输入,否则会出现引脚电压不确定的错误现象,此时为引脚悬空,PA0为高电平。所以按下按键为高电平,松开按键为低电平。

P2中外部接了一个上拉电阻,当按键松手时,套用弹簧模型(模型在下面),弹簧上拉,引脚为高电平,当按键按下,引脚接GND,下面的弹簧有无穷大的力,引脚为低电平。不存在悬空状态,可以配置为浮空输入或上拉输入。

P3按键按下为高电平,松手为低电平。PA0必须为下拉输入。

P4 PA0需要配置为下拉输入模式或者浮空输入模式。

2. 传感器模块介绍

2.1 实物展示

传感器模块:传感器元件(光敏电阻/热敏电阻/红外接收管等)的电阻会随外界模拟量的变化而变化,通过与定值电阻分压即可得到模拟电压输出,再通过电压比较器进行二值化即可得到数字电压输出

从左往右依次为:光敏电阻传感器、热敏电阻传感器、对射式红外传感器、反射式红外传感器

2.2 电路原理

  • 使用上下拉电阻分析电路

举例方便说明上下拉电阻的工作逻辑

将AO输出端想象成一个放在屋里的水平杆,R1上拉电阻相当于拴在屋顶的弹簧将杆子往上拉,N1下拉电阻相当于栓在地面的弹簧,将杆子往下拉,电阻的阻值越小,弹簧的拉力越强。在模型中,弹簧中间的电压为VCC或者GND,当两个弹簧相互拉扯的时候,中间的输出端就会向拉力强的一端偏移,偏移量取决于弹簧之差,如果上下拉弹簧的弹力相同,杆子位于居中位置,电路输出VCC/2的电压。如果上阻值小,拉力强,输出电压变高,下面阻值小,输出电压就变低,阻值为0电路中为短路,相当于两个无穷大拉力在对抗。

  • 二值化电压比较器

本质上是一个运算放大器,当同相输入端的电压大于反相输入端电压时,输出瞬间升高到最大值,也就是说输出接VCC,反之当同相输入端电压小于反相输入端电压时,输出就会瞬间降为最小值,也就是输出接GND。

2.3 传感器模块接法

DO数字输出接端口,用于读取数字量。

3. STM32单片机关于C语言的知识储备

3.1 C语言数据类型

注意:区别于51单片机中int占16位

3.2 C语言宏定义

•关键字:#define

•用途:用一个字符串代替一个数字,便于理解,防止出错;提取程序中经常出现的参数,便于快速修改

//定义宏定义:#defineABC 12345//用ABC字符串来替代12345这个参数
//引用宏定义:int a = ABC;  //等效于int a= 12345;

3.3 C语言typedef

•关键字:typedef

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

//定义typedef:typedef unsigned char uint8_t;
//引用typedef:uint8_t a;    //等效于unsigned char a;

3.4 C语言结构体

•关键字:struct

•用途:数据打包,不同类型变量的集合

//定义结构体变量:struct{charx; int y; float z;} StructName;
//定义一个结构体变量叫StructName里面包含了charx; int y; float z三个子选项// 因为结构体变量类型较长,所以通常用typedef更改变量类型名typedef struct{charx;int y; float z;} StructName_t;//此时我们重新定义只需要StructName_t a;StructName_t b;
//使用.运算符引用结构体成员:StructName.x = 'A';StructName.y = 66;StructName.z = 1.23;
//或  pStructName->x= 'A';  
//pStructName为结构体的地址  pStructName->y= 66;pStructName->z = 1.23;

3.5 C语言枚举

•关键字:enum

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

//定义枚举变量:enum{FALSE = 0,TRUE = 1} EnumName;
// 因为枚举变量类型较长,所以通常用typedef更改变量类型名typedef enum{FALSE = 0, TRUE = 1} EnumName;
//引用枚举成员:只能按照枚举的定义EnumName = FALSE;EnumName = TRUE;

相关内容