还不知道检测输入电平信号用什么输入模式?

就简单的记住:
检测端口输入低电平0要用上拉 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
检测端口输入高电平1要用下拉 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;

你不知道你外接按键的原理图,不知道检测什么电平?

最简单的方法:
用电压表黑接地,红接输入端,一测便知。

没有外部按键模块?

骚操作:‘’所有的IO口都是外部按键‘’!
你甚至可以直接用杜邦线接VCC或地来模拟输入高低电平,起到按键效果。

看过第一篇你应该知道怎么初始化GPIO了
所以只讲一些新技巧,也就是上面三点。
下面是每一点的解释。

检测输入电平信号用什么输入模式?


PE2/PE3/PE4 按下后接地,输入为0,所以用上拉
PA0 按下后通3.3V电压,输入为1,所以用下拉

你不知道你外接按键的原理图,不知道检测什么电平?

你可以在模块上分清 VCC(中间) 和GND(—),那剩下的 Signal(S) 就是输入到STM32引脚来检测电平的。

用电压表检测
GND和Signal两端电压电压3.3V
按下后为0
这不跟上面内置的3个按键一样吗?
所以用上拉输入

水银倾斜检测模块

用电压表检测
GND和Signal两段电压电压3.3V


水银将内部连通之后 指示灯点亮
GND和Signal两端电压电压0
跟以上按键类比 是一样的道理

没有外部按键模块?

按键的检测不就是检测一个引脚的高低电平吗?

你可以直接:
上拉一个引脚
用杜邦线接地就是一次按键
下拉一个引脚
用杜邦线接VCC也是一次按键

如果你不想外部按键在PA6 想改成PE9 怎么办?
只需把初始化与PA6相关的做修改

以下为相关代码

只需改这3处  也必须要同时全部改掉这3处
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_Init(GPIOA, &GPIO_InitStructure);
/*-----------------------
文件名称:main.c
文件描述:按键控制LED闪烁,按下按键
S1取反LED2,
S2取反LED3,
S4同时取反LED2,LED3
The_Key(外部按键)使LED2,LED3闪烁5次
---------------------------*/
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"int main(void)
{uint8_t j; //定义变量 用于后面for循环LED_Init();//LED初始化KEY_Init();//内置按键初始化The_Key_Init();//外部按键初始化Daley_Init();//延时初始化while (1){if(!S1){Delay_ms(10);//延迟消抖 51单片机教程按键中已讲过if(!S1)   {while(!S1);//等待按键释放LED2_REV;}}if(!S2){Delay_ms(10);if(!S2) {while(!S2);LED3_REV;}}
//按键3类比1、2 此处省略if(S4){Delay_ms(10);if(!The_Key) {while(!The_Key);LED2_REV;LED3_REV;}}//外接按键PA6 //你也可以直接用杜邦线接VCC或地来模拟输入高低电平 起到按键效果if(!The_Key){Delay_ms(10);if(S4)   {while(S4);for(j=0;j<10;j++){LED2_REV;LED3_REV;Delay_ms(100);}}}}
}
/*------------------------------
文件名称:key.c
文件描述:配置按键初始化参数
--------------------------------*/
#include "key.h"void KEY_Init(void)//内部按键 PE2/PE3/PE4/PA0
{GPIO_InitTypeDef GPIO_InitStructure;//打开PE口时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);//PE2,PE3,PE4引脚设置    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;//端口速度GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;//端口模式,此为输入上拉模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//初始化对应的端口GPIO_Init(GPIOE, &GPIO_InitStructure);//PA0、PA6引脚设置   //打开PA口时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//端口速度GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;//端口模式,此为输入下拉模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//初始化对应的端口GPIO_Init(GPIOA, &GPIO_InitStructure);
}void The_KEY_Init(void)//外部按键  我用PA6去读取
{GPIO_InitTypeDef GPIO_InitStructure;//打开PA口时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//PA0引脚设置GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//端口速度GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;// 端口输入低电平0要上拉  输入高电平1要下拉//端口模式,此为输入上拉模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//初始化对应的端口GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/*------------------------------
文件名称:key.h
--------------------------------*/
#ifndef __KEY_H
#define __KEY_H#include "stm32f10x.h"#define S1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)
#define S2 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)
#define S3 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)
#define S4 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define The_Key GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6)void KEY_Init(void);void The_KEY_Init(void);#endif

STM32白话文教程(三)内置按键模块、外接按键检测 三句话让你玩明白按键 水银倾斜模块相关推荐

  1. form-create教程:给内置组件和自定义组件添加事件

    本文将介绍form-create如何给内置组件和自定义组件添加事件 form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成器.并且支持生成任何 Vue ...

  2. 《zw版·Halcon入门教程与内置demo》

    <zw版·Halcon入门教程与内置demo> halcon系统的中文教程很不好找,而且大部分是v10以前的版本. 例如,QQ群: 247994767(Delphi与halcon), 共享 ...

  3. STM32 进阶教程 5 - 内联函数

    前言 在计算机科学中,内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展):也就是说建议编译器将指定的函数体插入并取代每一处调 ...

  4. Python教程:内置函数filter()和匿名函数lambda解析

    一.内置函数filter filter()函数是 Python 内置的一个高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回由符合条件迭代器 ...

  5. python内置函数教程_Python内置函数详解

    此文参考python文档,然后结合自己的理解,写下来,一方面方便自己,让自己好好学习,顺便回忆回忆:另一方面,让喜欢的盆友也参考一下. 经查询,3.6版本总共有68个内置函数,主要分类如下: 数学运算 ...

  6. 在Maple 9中察看内置函数的原代码的三种方法

    Matlab中非常好的功能是edit [内置命令]可以直接察看所有内置命令的源代码,这样对于学习Matlab语言是极为丰富的资料.其实Maple中也有类似功能,也许使用不是非常明显,所以国内几乎没有任 ...

  7. 【融职培训】Web前端学习 第3章 JavaScript基础教程9 内置对象

    一.内置对象概述 javascript为我们提供了很多内置对象,这些内置对象为我们提供了很多语言的基本功能.我们之前学过的数组就是JavaScript的内置对象,除了数组我们还应该了解的内置对象有:M ...

  8. Photoshop 2023 Beta 24.6_爱国版_安装教程,内置AI绘画_创意填充Generative Fill功能及常见问题

    最近,Adobe公司再次书写了属于Photoshop的历史新篇章.宣布 Photoshop(Beta)迎来重大更新,新增「创意填充(Generative Fill)」功能,就是用生成式AI,来处理图像 ...

  9. 安装 FME Desktop 2020 教程(内置补丁可以有效激活软件)

    介绍:FME Desktop 2020是由加拿大Safe Software公司开发的空间数据转换处理系统,采用先进的数据转换技术,内置几十个转换器,能够满足绝大部分用户的空间数据格式转换功能.除此之外 ...

最新文章

  1. python 生成器与迭代器
  2. doctype的三种类型
  3. 文巾解题 929. 独特的电子邮件地址
  4. Google、Azure、阿里云、RedHat…全球的 K8s 圈大佬聚在一起要聊啥?
  5. ​Spring事务的传播行为案例分析
  6. Android实现网络音乐播放器
  7. 微课|中学生可以这样学Python(1.3节):Python代码编写规范
  8. 三百行python代码的项目_300行Python代码打造实用接口测试框架
  9. Atitit it法学论 uke协会it刑法attilax总结 目录 1. 法学plus 1 1.1. 替换表 1 2. 第一章 刑法概说 1 2.1. 财产 1 3. Line 65: 第四章 犯
  10. element ui输入地内容明明符合规则还是校验报错
  11. PHP + Apache + Mysql集成环境部署及简要教程
  12. 解构语音交互产品--人工智能AI技术
  13. java实现word,ppt,excel,jpg转pdf
  14. Mozilla5.0的意思
  15. 获取斗鱼直播间的弹幕信息
  16. 记录向 | 爬虫 | 裁判文书爬取(java)
  17. 国内知名公共 DNS 服务器居然有你知道哪些
  18. 蓝桥 卷“兔”来袭编程竞赛专场-05棋盘加密 题解
  19. DNF服务器该如何选择?
  20. lsnrctl command not found

热门文章

  1. LDAP添加 memberOf 模块
  2. 今天谈一下内网地址,外网地址
  3. 长尾分布,重尾分布(Heavy-tailed Distribution)
  4. Oracle之Check约束实例详解
  5. ps插件Coolorus for mac(photoshop色轮插件)
  6. 2016,Java成神初年
  7. Linux--shell--4--毫秒级时间戳
  8. 用八叉树优化RayCasting
  9. 港交所新股发售竞争激烈:网易云音乐暗盘破发,凯莱英、顺丰同城等暂未获得足额申购
  10. 平顶山学院微信缴学费使用说明