按键
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;