我是靠谱客的博主 想人陪舞蹈,最近开发中收集的这篇文章主要介绍3.3 GPIO输入按键2. 传感器模块介绍3. STM32单片机关于C语言的知识储备完,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  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;

最后

以上就是想人陪舞蹈为你收集整理的3.3 GPIO输入按键2. 传感器模块介绍3. STM32单片机关于C语言的知识储备完的全部内容,希望文章能够帮你解决3.3 GPIO输入按键2. 传感器模块介绍3. STM32单片机关于C语言的知识储备完所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部