你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
STMCU小助手 发布时间:2022-9-7 15:44
一、硬件电路分析
按键的具体硬件电路原理图如下:

f40131b166054fed9489df8bf0c0036b.png

大致就这两种:
KEY1 带上拉电路的,按键按下,PB12接地,输入低电平。
KEY2 不带上拉电路的,按键按下,PB13接地,输入低电平。
二、KEY按键配置
1. GPIO时钟配置
GPIO时钟配置函数

  1. void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
复制代码

本次配置如下

  1. RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); // 使能PB端口时钟
复制代码

2. GPIO初始化配置
工作模式可以参考:STM32F103:GPIO八种工作原理详解

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

GPIO初始化函数

  1. void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
复制代码

本次配置如下:

  1.   GPIO_InitTypeDef GPIO_InitStructure;
  2.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13;        // PB14,PB15
  3.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                        //上拉输入
  4.   GPIO_Init(GPIOB, &GPIO_InitStructure);                                          //初始化PB端口
复制代码

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

  1. uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
复制代码

本次配置如下:

  1. #define KEY1  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)//读取按键1
  2. #define KEY2  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)//读取按键2
复制代码

三、KEY按键实验
1. KEY按键实验功能介绍
本次实验主要实现的功能就是:
按KEY1,key加1,然后通过串口printf()函数,打印输出key值。
按KEY2,key减1,然后通过串口printf()函数,打印输出key值。

2. 配置程序
key.c
  1. #include "KEY.h"

  2. /***************  配置KEY用到的I/O口 *******************/
  3. void KEY_GPIO_Config(void)        
  4. {
  5.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);         // 使能PB端口时钟
  6.         
  7.   GPIO_InitTypeDef GPIO_InitStructure;
  8.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13;        // PB12,PB13
  9.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                        //上拉输入模式
  10.   GPIO_Init(GPIOB, &GPIO_InitStructure);                                          //初始化PB端口
  11. }
复制代码

key.h
  1. #ifndef __KEY_H
  2. #define        __KEY_H

  3. #include "stm32f10x.h"

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

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

  7. #endif
复制代码

3. 具体实现程序
main.c
  1. #include "stm32f10x.h"
  2. #include <stdio.h>
  3. #include "delay.h"
  4. #include "KEY.h"
  5. #include "Uart1.h"

  6. int main (void)
  7. {
  8.         KEY_GPIO_Config();        //KEY初始化        
  9.         Uart1_init();                //串口1初始化
  10.         
  11.         static         u8         key_up=1;        //按键松开标志
  12.                         int key=0;                //按键计数

  13.         while(1)
  14.         {
  15.                 if((key_up==1)&&(KEY1==0||KEY2==0))
  16.                 {
  17.                         delay_ms(10);        //消抖
  18.                         key_up=0;
  19.                         if(KEY1==0)                                       
  20.                         {        
  21.                                 key++;
  22.                                 printf("Key=%d",key);
  23.                         }
  24.                         else if(KEY2==0)               
  25.                         {        
  26.                                 key--;
  27.                                 printf("Key=%d",key);
  28.                         }
  29.                 }
  30.                 else if(KEY1==1&&KEY2==1)        //按键松开
  31.                 {
  32.                         key_up=1;
  33.                 }
  34.         }
  35. }
复制代码

————————————————
版权声明:根号五


收藏 评论0 发布时间:2022-9-7 15:44

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版