当前位置: 首页 > news >正文

四、HAL_驱动机械按键

1、开发环境。

(1)KeilMDK:V5.38.0.0

(2)STM32CubeMX:V6.8.1

(3)MCU:STM32F407ZGT6

2、机械按键简介

(1)按键内部是机械结构,也就是内部是没有电路的。按键按下内部引脚导通,松开内部断开。

3、实验目的&原理图

3.1、实验目的

(1)通过按键改变LED灯状态,按键检测采用外部中断。

3.2、原理图

(1)按键选择K1按键,K1接PE2。

(2)LED灯选择LED1,LED1接PF9。

 

4、STM32CubeMX创建工程及配置

4.1、创建工程

(1)打开STM32CubeMX软件。

(2)点击File→NewProject。

(3)Commercial Part Number(商用部件号)处输入MCU型号,然后选择正确的单片机型号,点击Start Project(开始项目)。

(4)配置工程名、工程存放文件等。

点击Project Manager(项目经理)进行如下配置。

点击Code Generator(代码生成器)进行如下配置。 

(5)修改中断优先级,按键消抖在中断中要使用HAL_Delay()函数,需要HAL_Delay()函数的优先级比外部中断低。

(6)点击GENERATE CODE生成KeilMDK工程。

4.2、配置时钟及GPIO

(1)HSE、LSE时钟源选择

  • HSE:高速外部时钟源
  • LSE:低速外部时钟源
  • Disable:禁用
  • BYPASS Clock Source:旁路时钟源
  • Crystal/Ceramic Resonator :水晶/陶瓷共振器
  • 一般选择水晶陶瓷共振器
  • 旁路时钟源就是由外部给定一个时钟信号,一般用于作为同步时钟。
  • 水晶/陶瓷共振器:指外接晶振,经过内部振荡电路产生时钟。

(2)LED1 GPIO配置

(2)K1 GPIO配置

  • External interrupt Mode with Resing edge trigger detection:外部中断模式与上升沿触发检测
  • External interrupt Mode with Falling edge trigger detection:外部中断模式与下降沿触发检测

 (3)打开K1按键的外部中断

(4)时钟树配置

(5)配置完需要重新点击GENERATE CODE更新KeilMDK代码。

5、KeilMDK软件编写

5.1、程序编写。

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(GPIO_Pin == K1_Pin)    /*按键被按下,产生下降沿*/{/*中断执行内容较多,可在中断回调函数中设立标志位,在while循环中去检测标志位。*检测到标志位在执行相应的内容,这样不会影响到其他中断的响应*/HAL_Delay(15);          /*延时消抖15毫秒*/if(HAL_GPIO_ReadPin(K1_GPIO_Port, K1_Pin) == GPIO_PIN_RESET)  /*按键消抖*/{HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);  /*LED1灯状态取反*/}	}
}

5.2、完整工程下载地址。

(1)完整工程存储在码云。

(2)STM32_CSDN: CSDN中STM32专栏的所有示例代码

 

http://www.lryc.cn/news/92514.html

相关文章:

  • 机器学习实战六步法之数据收集方法(四)
  • 神经网络:CNN中的filter,kernel_size,strides,padding对输出形状的影响
  • Spring Boot集成Redisson布隆过滤器案例
  • 使用 VSCode SSH 公网远程连接本地服务器开发 - cpolar内网穿透
  • portraiture宿主插件最新v4中文版本下载及使用教程
  • 一. ATR技术指标的定义与运用
  • linux find帮助文档
  • 搜索与图论(acwing算法基础)
  • 【数据结构】何为数据结构。
  • 【P57】JMeter 保存响应到文件(Save Responses to a file)
  • Visual Studio 2022 v17.6 正式发布
  • std::chrono时间处理
  • ieda codeformatV2.xml
  • Hbase
  • [golang 微服务] 5. 微服务服务发现介绍,安装以及consul的使用,Consul集群
  • 【数据结构】哈希应用
  • 【 Python 全栈开发 - WEB开发篇 - 31 】where条件查询
  • Android系统的Ashmem匿名共享内存子系统分析(5)- 实现共享的原理
  • 谈一谈冷门的C语言爬虫
  • 基于状态的维护(CBM)如何推动设备效率提高?
  • DC LAB8SDC约束四种时序路径分析
  • 学生考试作弊检测系统 yolov8
  • 【基于容器的部署、扩展和管理】 3.2 基于容器的应用程序部署和升级
  • Jmeter 实现 grpc服务 压测
  • 深入源码分析RecyclerView缓存复用原理
  • 内网隧道代理技术(一)之内网隧道代理概述
  • 设计图形用户界面的原则
  • 1:操作系统导论
  • 什么是微软的 Application Framework?
  • 一个关于宏定义的问题,我和ChatGPT、NewBing、Google Bard、文心一言 居然全军覆没?