STM32嵌入式开发学习笔记(三):使用按键控制小灯
按键和小灯一样,也是通过GPIO外设与主板连接,也是通过GPIO_InitStruct类型结构体控制其工作。
查阅技术手册,按钮连接GPIOA控制下的管脚0.
但与之不同的是,按键是一种输入设备,输入设备的工作状态也有四类,模拟输入,浮空输入,下拉输入和上拉输入。
模拟输入就是输入一个波形,浮空输入指的是未按下按钮时,不确定此管脚的信号状态。
上拉输入指按下按钮时,输出低电平,即0,松开按钮时,输出高电平,即1.
下拉输入则相反。
但是因为STM32的构造问题,按钮只能采用上拉输入,如果将此管脚工作状态定义为下拉输入,则输出会保持0.
可能是因为管脚A1STM32的设计上就是接地的,因此,下拉输入,按下按钮后依然保持了低电平。
用GPIO_ReadInputDataBit函数读取某个管脚的输入输出,注意此函数返回值是u8,无符号8位整数。
在key.h/.c文件中定义和实现按钮初始化和读取按钮功能。
#include <stm32f10x.h>
#ifndef _KEY_H
#define _KEY_H
void KEY_configer(void);
u8 KEY_scan(void);
#endif
//key.h
#include <stm32f10x.h>
#include <key.h>
void KEY_configer(){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_KEY_INIT;
GPIO_KEY_INIT.GPIO_Pin=GPIO_Pin_0;
GPIO_KEY_INIT.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_KEY_INIT.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init(GPIOA,&GPIO_KEY_INIT);
}
u8 KEY_scan(){
return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
}
//key.c
在led.h/.c中定义小灯初始化和开关
#include <stm32f10x.h>
#ifndef _LED_H
#define _LED_H
void LED_configer(void);
void LED_on(void);
void LED_off(void);
#endif
//led.h
#include <led.h>
#include <stm32f10x.h>
void LED_configer(){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_LED_INIT;
GPIO_LED_INIT.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
GPIO_LED_INIT.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_LED_INIT.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,&GPIO_LED_INIT);
}
void LED_on(){
GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4);
}
void LED_off(){
GPIO_ResetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4);
}
//led.c
主函数的实现逻辑是,不断询问按钮状态,若按下则打开小灯,若未按下则关闭小灯
#include <stdio.h>
#include <stm32f10x.h>
#include <led.h>
#include <key.h>
int main(){
KEY_configer();
LED_configer();
while(){
if(KEY_scan()==){
LED_on();
}else{
LED_off();
}
}
return ;
}
//main.c
STM32嵌入式开发学习笔记(三):使用按键控制小灯的更多相关文章
- STM32嵌入式开发学习笔记(一)
本文中,笔者将介绍使用嵌入式开发工具Keil uVision5,使用C语言,对微处理器STM32F103C8进行嵌入式开发. 开发使用C语言,首先需要新建一个C语言文件,将其设为主函数的入口,因此,将 ...
- STM32嵌入式开发学习笔记(六):串口通信(上)
本文我们将了解STM32与外部设备通过串口通信的方式. 所谓串口通信,其实是一个类似于计算机网络的概念,它有物理层,比如规定用什么线通信,几伏特算高电平,几伏特算低电平.传输层,通信前要发RTS,CT ...
- STM32嵌入式开发学习笔记(七):串口通信(下)
下面我们进行几个串口通信的实际应用. 实验一:发信实验,让开发板通过串口向电脑发送信息: #include <stdio.h> #include <stm32f10x.h> # ...
- STM32嵌入式开发学习笔记(五):中断
我们过去了解了用循环实现延时,或用系统滴答计时器实现延时,但这两种方法都有一种问题:会阻塞处理器的运行.下面我们学习一种不阻塞处理器运行其他事件的功能:时钟中断. 所谓中断,就是让处理器放下手头的事情 ...
- STM32嵌入式开发学习笔记(四):使用滴答计时器实现精准计时
前面我们讲过,因为在STM32上没有系统时间的接口,因此无法调用sleep函数,在本文中,笔者将利用滴答计时器实现精准延时. 查阅技术手册,滴答计时器依赖于一个SysTick_Type类型寄存器,定义 ...
- STM32嵌入式开发学习笔记(二):将功能封装为库文件
将所有的函数都堆在main.c文件里不是好的选择,庞大的代码文件会是你维护的障碍,明智的做法是,一种功能封装到一个库文件里. 库文件就是你代码开始部分写的#include<xxxx.h>里 ...
- python-django开发学习笔记三
1.简述 1.1 开发环境 该笔记所基于的开发环境为:windows8.python2.7.5.psycopg2-2.4.2.django1.5.4.pyCharm-2.7.3.以上所描述的软件.插件 ...
- 硬件——nrf51822第三篇,按键控制小灯
现象是按键按下,小灯亮,按键抬起,小灯灭. 从这一节我们细致剖析gpio口的设置: nrf51822片上一共有32个数字引脚,分为4个port,如下: port 0 pin 0-7 port 1 pi ...
- 嵌入式Linux学习笔记(三) 字符型设备驱动--LED的驱动开发
在成功构建了一个能够运行在开发板平台的系统后,下一步就要正式开始应用的开发(这里前提是有一定的C语言基础,对ARM体系的软/硬件,这部分有疑问可能要参考其它教程),根据需求仔细分解任务,可以发现包含的 ...
随机推荐
- 后端优化(2)—— BA与图优化
- [CSP-S模拟测试]:时间机器(贪心+set)
题目描述 作为一名天才科学家,$Kurisu$已经设计出了时间机器的构造. 根据$Kurisu$的构想,时间机器中有$n$种需要放置电阻的节点,第$i$种节点有$s_i$个,其电压$U$的变动范围是$ ...
- 团队冲刺DAY3
DESUtil.java是包含加密解密抽象类的Java文件 DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准 ...
- MySQL 存储过程-definer和invoker的解释
[definer和invoker的解释] 创建存储过程的时候可以指定 SQL SECURITY属性,设置为 DEFINER 或者INVOKER,用来奉告mysql在执行存储过程的时候,,是以DEFIN ...
- HTML5: HTML(5) 代码规范
ylbtech-HTML5: HTML(5) 代码规范 1.返回顶部 1. HTML(5) 代码规范 HTML 代码约定 很多 Web 开发人员对 HTML 的代码规范知之甚少. 在2000年至201 ...
- HTML5: HTML5 Audio(音频)
ylbtech-HTML5: HTML5 Audio(音频) 1.返回顶部 1. HTML5 Audio(音频) HTML5 提供了播放音频文件的标准. 互联网上的音频 直到现在,仍然不存在一项旨在网 ...
- JS-拷贝对象
As it is well known to us all, 拷贝对象分为浅拷贝和深拷贝,深拷贝只会复制地址,深拷贝才会复制内容,那么 JS 如何进行这两种拷贝呢? # 浅拷贝 ## Object.a ...
- django 重写 mysql 连接库实现连接池
django 重写 mysql 连接库实现连接池 问题 django 项目使用 gunicorn + gevent 部署,并设置 CONN_MAX_AGE 会导致 mysql 数据库连接数飙升,在高并 ...
- idea下远程debug配置
一. 背景: 在测试工作中,为方便发现代码中的逻辑问题,尝试使用远程debug模式,在测试过程中走查代码,不仅可以辅助测试减少与开发的沟通成本,更便于了解业务提升测试深度. 二. 配置方式: 1. 调 ...
- 跨域篇--JSONP原理
一篇文章让你明白 jsonp原理详解 什么是JSONP? 先说说JSONP是怎么产生的: 其实网上关于JSONP的讲解有很多,但却千篇一律,而且云里雾里,对于很多刚接触的人来讲理解起来有些困难,着用自 ...