KEY按键实验程序源码链接
STM32F103标准库开发—目录


一、硬件电路分析

按键的具体硬件电路原理图如下:

大致就这两种:

  1. KEY1 带上拉电路的,按键按下PB12接地,输入低电平
  2. KEY2 不带上拉电路的,按键按下PB13接地,输入低电平

二、KEY按键配置

1. GPIO时钟配置

GPIO时钟配置函数

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

本次配置如下

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); // 使能PB端口时钟

2. GPIO初始化配置

工作模式可以参考:STM32F103:GPIO八种工作原理详解

本次GPIO初始化配置工作模式为:GPIO_Mode_IPU 上拉输入,因为按键按下输入的电平是低电平,上拉输入会使低电平输入更加容易读取。

GPIO初始化函数

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

本次配置如下:

  GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13;    // PB14,PB15GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;              //上拉输入GPIO_Init(GPIOB, &GPIO_InitStructure);                    //初始化PB端口

3. GPIO输入读取配置

GPIO输入读取函数
返回值:低电平----0,高电平----1。

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

本次配置如下:

#define KEY1  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)//读取按键1
#define KEY2  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)//读取按键2

三、KEY按键实验

1. KEY按键实验功能介绍

本次实验主要实现的功能就是:

  1. 按KEY1,key加1,然后通过串口printf()函数,打印输出key值。
  2. 按KEY2,key减1,然后通过串口printf()函数,打印输出key值。

2. 配置程序

key.c

#include "KEY.h"/***************  配置KEY用到的I/O口 *******************/
void KEY_GPIO_Config(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  // 使能PB端口时钟 GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13; // PB12,PB13GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;              //上拉输入模式GPIO_Init(GPIOB, &GPIO_InitStructure);                      //初始化PB端口
}

key.h

#ifndef __KEY_H
#define __KEY_H#include "stm32f10x.h"#define KEY1  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)//读取按键1
#define KEY2  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)//读取按键2void KEY_GPIO_Config(void);    //Key初始化#endif

3. 具体实现程序

main.c

#include "stm32f10x.h"
#include <stdio.h>
#include "delay.h"
#include "KEY.h"
#include "Uart1.h"int main (void)
{KEY_GPIO_Config(); //KEY初始化    Uart1_init();       //串口1初始化static  u8  key_up=1;  //按键松开标志int key=0;     //按键计数while(1){if((key_up==1)&&(KEY1==0||KEY2==0)){delay_ms(10);  //消抖key_up=0;if(KEY1==0)                 {   key++;printf("Key=%d",key);}else if(KEY2==0)     {   key--;printf("Key=%d",key);}}else if(KEY1==1&&KEY2==1)   //按键松开{key_up=1;}}
}

STM32F103标准库开发:KEY按键实验相关推荐

  1. STM32F103标准库开发---SPI实验---W25Qxx系列外部Flash芯片

    STM32F103标准库开发----目录 STM32F103标准库开发----SPI实验----基本原理 STM32F103标准库开发----SPI实验----底层驱动程序 W25Qxx全系列---- ...

  2. STM32F103标准库开发----CAN总线通信实验----发送和接收

    STM32F103标准库开发----目录 STM32F103标准库开发----CAN总线通信实验----基本原理 STM32F103标准库开发----CAN总线通信实验----初始化/波特率 STM3 ...

  3. STM32F103标准库开发:LED跑马灯实验

    LED跑马灯实验程序源码链接 STM32F103标准库开发-目录 文章目录 一.硬件电路分析 二.LED灯GPIO配置 1. GPIO初始化配置 使能GPIO时钟 GPIO初始化配置信息 2. GPI ...

  4. STM32F103标准库开发:外部中断(EXTI)实验

    STM32F103标准库开发----目录 STM32F103标准库开发----外部中断(EXTI)实验----程序源码 本文章技术信息均出自:STM32F103系列超详细参考手册-中文版 一.外部中断 ...

  5. STM32F103标准库开发---SPI实验---读写 W25Q128 外部 Flash

    STM32F103标准库开发----目录 W25Q128读写----程序源码----点击下载 W25Qxx全系列数据手册-点击下载 一.实验前期准备 本次实验的 MCU 是 STM32F103C8T6 ...

  6. STM32F103标准库开发:Keil5新建STM32工程

    STM32标准库版工程模板链接 STM32F103标准库开发-目录 首先需要搭建Keil5编译环境,才可以新建STM32工程. Keil5编译环境搭建流程----STM32和GD32 新建STM32工 ...

  7. STM32F103标准库开发:内部Flash的读写

    本文章技术信息均出自:STM32F103系列超详细参考手册-中文版 STM32F103标准库开发-目录 一.STM32存储器介绍 STM32存储器分为以下两种: 1. 随机存储器-RAM RAM是与C ...

  8. vs2010c语言安装,VS2010 boost标准库开发环境安装教程

    分享VS2010 boost标准库开发环境安装教程 1. BOOST编译过程非常复杂,目前为了学习BOOST,首先搭建基于VS2010的BOOST开发环境. Boost库是一个可移植.提供源代码的C+ ...

  9. 第2课【CMSIS和标准库开发】标准库 CMSIS 分层

    目录 基本知识框架 课堂笔记 CMSIS CMSIS的分层关系和作用 CMSIS层文件结构 内核函数层文件 外设函数访问层文件 标准库开发 标准库开发 LED-GPIO 标准库开发 KEY-GPIO ...

最新文章

  1. Windows服务器SYSTEM权限Webshell无法添加3389账户情况突破总结
  2. Action请求后台出现Response already commited异常解决方法
  3. mysql 数据类型 int_MySQL数据类型 int(M) 表示什么意思?
  4. WCF 第四章 绑定 netMsmqBinding
  5. 深入学习用Go编写HTTP服务器
  6. 是时候重构下自己的博客了
  7. python绘图背景透明_如何在 Matplotlib 中更改绘图背景
  8. selenium03-三个简单的web自动化实例
  9. Java HTML转换为图片
  10. 信号与系统_严国志_第一章_绪论
  11. 非越狱逆向开发总结文档(含iOS Extension)
  12. 程序员技能与成长:程序员的必备工具箱(值得收藏)
  13. 打印收款单据(easypoi)Vue+springBoot+Mybatisplus
  14. 05.看板方法——在制品
  15. 抓包微信小程序openid的教程
  16. 高通项目端口每次跳出要求安装驱动解决方法
  17. PHP 简单汉字繁简数据转换
  18. VS2013打开ASP.NET网站管理工具
  19. 基于hls格式的光条检测纯c++代码——重心法
  20. java坐标代码_Java实现地理坐标判断

热门文章

  1. 哔哩哔哩 BV、AV互转 C#版
  2. 想进国企央企,一定要保存好所有工作履历证明材料,包括劳动合同、离职证明、社保记录等!...
  3. 免费开源ETL工具KETTLE
  4. 光端机连接示意图详细连接方式图解
  5. 微信小程序顶部标题栏仅保留右上角胶囊状按钮
  6. 阿里后端常用的 15 款开发工具,你不试试?
  7. 射频微波芯片设计7:详解基于ADS的低噪声放大器芯片设计
  8. #displaytag:一个简易的Java分页插件(无需其他的前端分页插件) @FDDLC
  9. qq音乐mp3解析php源码,QQ音乐API
  10. 设置固定IP后无法上网