STM32-04基于HAL库(CubeMX+MDK+Proteus)中断案例(按键中断扫描)

文章目录

  • 一、功能需求分析
  • 二、Proteus绘制电路原理图
  • 三、STMCubeMX 配置引脚及模式,生成代码
  • 四、MDK打开生成项目,编写HAL库的按键检测代码
  • 五、运行仿真程序,调试代码

一、功能需求分析

在完成GPIO输入输出案例之后,开始新的功能模块的学习。同样是实现按键输入检测的功能,在GPIO的案例中,我们使用的是查询扫描方式,这种方式有一个缺点,浪费CPU算力,功能代码是放在while循环中,一直在循环检测。这一次我们介绍中断扫描方式完成按键状态检测,只有在开关按键状态变换的时候,才会触发中断,通知CPU处理中断事件,执行中断服务。

需求分析

  1. 按键检测使用中断扫描方式;
  2. 连线方式:PA0-LED0;PA1-LED1;PA4-KEY0;PA6-KEY1;
  3. 按键中断模式设置为上升沿触发;
  4. KEY0控制LED0,KEY1控制LED1;
  5. 每次开关状态变化,使LED状态反转。

二、Proteus绘制电路原理图

Proteus绘制需要对基本元器件的名称有一定了解,如下方的发光二极管LED、电阻RES,可以在网上查找对应的元器件名称列表,方便以后绘制。

绘制电路原理图的步骤:创建画布=》芯片选型及放置=》元器件选型及放置=》连接电路=》修改元器件参数=》仿真运行。

下图为所需元器件清单。
在这里插入图片描述
下图为电路原理图。
在这里插入图片描述

三、STMCubeMX 配置引脚及模式,生成代码

接下来,根据原理图绘制,创建CubeMX项目,配置引脚及工作模式,生成MDK项目代码。

创建项目,选择Pinout=》system core=》GPIO:
点击PA0,选择GPIO_Output推挽输出模式,同理,配置PA1。
在这里插入图片描述

点击PA4,选择GPIO_EXTI4,同理,配置PA6。
在这里插入图片描述
选择Pinout=》system core=》NVIC:
在配置中勾选EXTI4和【9:5】的中断Enabled选项,并设置各自的抢占式优先级为3和2。
优先级值越小,优先级越高,抢占式优先级可以实现中断嵌套,也就是说,在中断4执行中断服务时,如果中断【9:5】触发了中断,会暂停中断4,执行中断【9:5】。
在这里插入图片描述

在clock单元,配置系统时钟为72MHz。
在这里插入图片描述在Project单元,填写项目名称、保存路径、IDE和版本。
在这里插入图片描述在 code generator中,配置添加库的方式为所需库,用户代码在每次项目重新生成时保留。在这里插入图片描述配置完成,通过以上步骤,完成了2个LED引脚的模式配置及时钟配置,接下来,点击GENERATE,生成项目代码。
在这里插入图片描述找到生成路径,可以看到项目目录文件。
目录树

四、MDK打开生成项目,编写HAL库的按键检测代码

从上面步骤中,生成了MDK项目。
在MDK-ARM目录中,找到项目快捷方式,打开项目。
在这里插入图片描述
在gpio.c文件中找到__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)函数,复制到main.c中。
__weak 为弱函数,如果项目中有不带__weak的同名函数,被调用时则执行同名函数,如果只有__weak函数,被调用时则其被执行。
在这里插入图片描述拷贝后放在注释为用户代码区域,当中断触发,则此函数被调用。
在这里插入图片描述
callback函数全部代码
这里出现了新的GPIO函数,引脚状态切换,有两个参数,GPIO组名和引脚名。
在这里插入图片描述
还有一个消除中断挂起位的宏调用,中断触发后需要用户手动清除挂起位。
在这里插入图片描述

/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{//PA4中断服务if(GPIO_Pin & GPIO_PIN_4)HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);//PA6中断服务if(GPIO_Pin & GPIO_PIN_6)HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
}

在项目中勾选生成HEX选项,HEX文件就是MDK编译生成的十六进制文件,作为烧录到开发板的源程序文件使用,当然,这里我们使用仿真,在Proteus中加载HEX即可。
在这里插入图片描述

点击编译程序,生成HEX文件。在编译窗口显示生成了以下信息,则编译成功,保证 0 errors再进行下一步。
在这里插入图片描述

五、运行仿真程序,调试代码

在Proteus中,双击芯片,选择加载程序路径。
04_NVIC\MDK\NVIC\MDK-ARM
上面是我的项目的HEX文件目录路径。

点击仿真按钮,运行程序,查看功能执行结果。
在这里插入图片描述

可以看到,两个黄色LED随着开光闭合断开改变切换点亮熄灭状态,功能正常。

代码链接:STM32-04基于HAL库(CubeMX+MDK+Proteus)中断案例(按键中断扫描)

至此,我们已经完成了STM32的开发环境搭建以及测试案例的编写,后面,会给大家介绍更多的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/296243.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node.js环境调用百度智能云(百度云)api鉴权认证三步走

方式一 :Postman脚本的方式生成v1版本的认证字符串 Postman脚本下载 下载Postman pre-request Script 设置 Authorization 示例脚本 方式二:在线签名工具生成 (试用于验证编程字符串签名是否有错误) 签名计算工具 https://cloud.baidu.com/signature/index.html …

使用libibverbs构建RDMA应用

本文是对论文Dissecting a Small InfiniBand Application Using the Verbs API所做的中英文对照翻译 Dissecting a Small InfiniBand Application Using the Verbs API Gregory Kerr∗ College of Computer and Information ScienceNortheastern UniversityBoston, MAkerrgccs…

HbnnMall电子商城系统介绍(功能与技术栈)

今天在看我个人网站上的文章时,看到了曾经在2020年自己开发的电商系统。那时我已经入职小米有一段时间了,基本已经对各个业务线,各种业务知识有了系统性的了解和学习,所以想自己动手写一个电商系统,以便进一步提高自己…

ElasticSearch7.8的下载与安装和Kibana 7.8.0工具使用安装

1、ElasticSearch7.8.0下载 elasticsearch: 官方下载地址:https://www.elastic.co/cn/downloads/elasticsearch 链接: https://pan.baidu.com/s/1wAKQoB3nhLhcnBlPfVOLxQ 提取码: t83n kibana: 链接: https://pan.baidu.com/s/156aD9zDdvUv8LFgDEIPoSw 提取码:…

云存储中常用的相同子策略的高效、安全的基于属性的访问控制的论文阅读

参考文献为2022年发表的Efficient and Secure Attribute-Based Access Control With Identical Sub-Policies Frequently Used in Cloud Storage 动机 ABE是实现在云存储中一种很好的访问控制手段,但是其本身的计算开销导致在实际场景中应用收到限制。本论文研究了…

(2024)Ubuntu源码安装多个版本的opencv并切换使用

本人工作会用到x86_64的opencv和aarch64的opencv,所以写下来备忘自用 一、源码编译安装 依赖库安装: sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev o…

上位机图像处理和嵌入式模块部署(qmacvisual图像清晰度)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 做过isp的同学都知道,图像处理里面有一个3A,即自动曝光、自动白平衡和自动对焦。其中自动对焦这个,就需要用输入…

HarmonyOS NEXT应用开发之PersistentStorage:持久化存储UI状态

前两个小节介绍的LocalStorage和AppStorage都是运行时的内存,但是在应用退出再次启动后,依然能保存选定的结果,是应用开发中十分常见的现象,这就需要用到PersistentStorage。 PersistentStorage是应用程序中的可选单例对象。此对…

Vue的学习之旅-part1

Vue的学习之旅-part1 vue介绍vue读音编程范式ES6中不用var声明变量vue的声明、初始化传参使用data中数据时要用this指向 vue中的语法糖MVVM在Vue中, MVVM的各层的对应位置 方法、函数的不同之处 vue介绍 vue读音 Vue 读作 /vju:/ 不要读成v u e Vuex 的x读作叉 不…

Redis高可用技术

一.Redis高可用介绍: 高可用是指:服务器正常访问的时间 衡量的标准是:在多长时间内可以提供正常服务99.9%、99.99%、99.999%等等 但是在Redis语境中, 高可用的含义似乎要宽泛一些,除了保证提供正常服务(如主从分离、…

IntelliJ IDEA中文---强化智能编码与重构,提升开发效率

IntelliJ IDEA 2023是一款功能强大的集成开发环境(IDE),专为Java开发人员设计。它支持智能代码编辑、自动补全和重构,帮助开发者提高编码效率。同时,内置了丰富的调试工具,支持断点调试和变量监视&#xff…

C语言--文件操作

1.标准流 • stdin - 标准输⼊流,在⼤多数的环境中从键盘输⼊,scanf函数就是从标准输⼊流中读取数据。 • stdout - 标准输出流,⼤多数的环境中输出⾄显⽰器界⾯,printf函数就是将信息输出到标准输出 流中。 • stderr - 标…

丰诺畅机电科技将莅临2024年第13届生物发酵展

参展企业介绍 无锡丰诺畅机电科技有限公司,是一家分离设备专业制造公司,集开发、设计、制造、销售、服务于一体;具有专业的生产技术,先进的生产工艺,精良的制造设备,完善的检测手段;为满足不同用户的过滤需求&#xf…

HTTP/UDP/TCP/IP网络协议

文章目录 计算机网络基础HTTPUDPTCP连接管理(三次握手/四次挥手)TCP可靠传输(确认答应)超时重传滑动窗口流量控制拥塞控制延时应答捎带应答粘包问题其他 IP数据链路层MUT 相关问题TCP会粘包、UDP永远不会粘包 学习博客 计算机网络基础 OSI模型定义了网络互连的七层框架&#x…

esp32控制舵机---待完善

舵机有三个引脚,分别是电源、电源GND和信号线。如下图所示: ESP32-WROOM-32E的引脚的定义如下: 图来自乐鑫官网:ESP32-DevKitC V4 入门指南 - ESP32 - — ESP-IDF 编程指南 v5.2.1 文档 硬件连接图: 待补充

013——超声波模块驱动开发(基于I.MX6uLL与SR04)

目录 一、 模块介绍 1.1 产品特色 1.2 产品实物图 1.3 接口定义 1.4 测距调节 1.5 模块工作原理 1.6 注意 二、 编码思路 三、 驱动程序 四、 应用程序 五、 Makefile 六、 其它及实验 一、 模块介绍 超声波测距模块是利用超声波来测距。模块先发送超声波&#xf…

边缘计算盒子与云计算:谁更适合您的业务需求?

边缘计算盒子和云计算,这两个概念听起来可能有点复杂,但其实它们就是两种不同的数据处理方式。那谁更适合您的业务需求呢?咱们来详细说说。 边缘计算盒子,就像是个小型的数据处理中心,放在离你业务现场比较近的地方。它…

WPS二次开发专题:如何获取应用签名SHA256值

作者持续关注WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 在申请WPS SDK授权版时候需要开发者提供应用包名和签…

美创科技获浙江省网络空间安全协会多项荣誉认可

4月2日,浙江省网络空间安全协会第二届会员大会第一次会议在杭州隆重召开,近180家会员单位代表、数十位特邀专家、嘉宾莅临现场。浙江省委网信办副主任马晓军出席会议并致辞,本次大会由协会秘书长吴铤主持。 凝心聚力,继往开来&…

SAP:无法在插件模式 HTTP 中处理消息 E ** xxx

问题描述:利用post方式接口,返回信息为 无法在插件模式 HTTP 中处理消息 E ** xxx ,如何排查是因为什么问题导致的? 解决方法: 事务码:SE91, 输入消息类,消息编号,点击显示,查看报…