本节在学习GPIO输入之前,我们首先学习传感器电路的硬件知识,其次对C语言中的一些基本知识进行复习,最后编写GPIO输入的代码。
传感器电路的硬件知识
下图中为传感器部分的原理图:
图中将传感器接在P1连接座,通过N1传感器输出模拟电压信号IN+,将IN+信号输入到电压比较器LM393与可调电阻产生的N-信号进行比较,比较后输出数字信号DO,如果DO信号为低,则LED2导通点亮,如果DO信号为高,则LED2灭。LED2默认状态下由于R5电阻的上拉作用使其无法导通,默认为熄灭状态。
C语言部分的复习
由于后续的部分会用到C语言相关的知识,以下做一些C语言部分的复习:
数据类型
在STM32中,C语言官方使用定义的stdint关键字头文件,用来描述数据类型,比如int8_t等同于关键字char,使用STM32定义的关键字更简洁,但是可能需要适应一段时间,以下展示了数据类型与关键字的对应关系;
#define,宏定义,C语言中预处理命令一种
C语言中宏定义的作用:使用宏来替换原来的字符串:
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字
关键字typedef和define有类似的地方,不同之处在于:
1.typedef只能对变量类型的名称进行改名。
2.define不需要分号,typedef需要分号。
3.typedef定义的新名称在语句的最后,而define将新名称放在中间。
struct结构体
C语言中使用struct定义结构体,用于将不同类型的数据变量打包放在一起,使用.操作符来调用结构体成员,并赋值。
也可以使用typedef将结构体的名称定义为更简洁的名称。
enum是一个关键字,,枚举数据类型描述的一组整型值的集合
枚举是用来定义整型变量的取值范围。
使用typedef可以将枚举的名称定义的更简洁。
STM32F103C8T6库函数方式_GPIO输入实验代码编写
1.思路:将LED驱动代码和按键驱动代码封装成模块的形式,在main函数中调用
#include "stm32f10x.h" //添加头文件
#include "Delay.h"
#include "LED.h"
int main(void)
{
LED_Init();
while(1)
{
LED1_ON();
Delay_ms(300);
LED1_OFF();
Delay_ms(300);
LED2_ON();
Delay_ms(300);
LED2_OFF();
Delay_ms(300);
}
}