栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

STM32F103标准库开发:KEY按键实验

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

STM32F103标准库开发:KEY按键实验

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,PB15
  GPIO_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"


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,PB13
  GPIO_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)//读取按键2

void KEY_GPIO_Config(void);	//Key初始化

#endif 
3. 具体实现程序 main.c
#include "stm32f10x.h"
#include 
#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;
		}
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/913239.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号