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

【Proteus】:LCD1602仿真实验基于STM32CubeMX LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示原理: LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。LCD1602则是指显示内容为16 * 2,即可以显示两行、每行可以显示 16 个字符的液晶模块。 阅读详情

一、功能需求分析

在完成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的开发环境搭建以及测试案例的编写,后面,会给大家介绍更多的功能。

STM32矩阵键盘Proteus仿真:零成本掌握按键检测与数码管显示 在嵌入式系统开发中,人机交互是核心基础,而按键检测作为最直接的输入方式,其稳定性和效率至关重要。其原理是通过GPIO端口读取电平变化来识别用户输入,但机械按键固有的抖动问题需要通过软件或硬件消抖技术解决,以确保信号的可靠性。掌握高效的按键扫描算法(如行扫描法)和状态机消抖,能显著提升系统响应速度和资源利用率,这些技术广泛应用于智能仪表、工业控制和消费电子等场景。Proteus仿真技术为学习和验证这些关键技能提供了零成本的理想平台,它允许开发者在虚拟环境中搭建完整的STM32最小系统,连接矩阵键盘和数码管等外 阅读详情

相关推荐

基于STM32与Proteus的汽车盲区监测系统仿真与开发实战

嵌入式系统开发中,传感器数据采集与实时控制是核心基础。其原理在于通过微控制器(如STM32)的GPIO、定时器等外设,精确读取传感器信号,并依据预设逻辑驱动执行机构。这项技术的价值在于能够以低成本、高可靠的方式实现环境感知与自动化响应,广泛应用于智能家居、工业控制及汽车电子等领域。在汽车安全场景中,盲区监测系统正是其典型应用,它利用超声波传感器探测侧后方障碍物距离,通过STM32进行数据处理与分级报警决策。本文聚焦于如何运用Proteus仿真工具,高效完成此类系统的方案验证与调试,有效规避了传统开发中硬件成

weixin_30565199的博客 353

HAL库开发——外部中断

2.16个中断通道,相同数字的GPIO口公用一个中断通道,即PA0~PG0只能有一个配置为外部中断 ​​​​​​​ ​​​​​​​ ​​​​​​​。1.外部中断不需要程序去读取外部端口的电平状态,当开启外部中断后,对应的GPIO口(被配置为数字输入)上的电平按照预设的方式(上升沿,下降沿或高低电平)发生变化时就会产生中断信号。外部中断的初始化函数不在主程序中而是在GPIO的初始化函数中完成。3.设置NVIC,勾选EXTI0表示允许中断。

weixin_66275497的博客 4304

基于STM32与Proteus的汽车盲区监测系统仿真设计与实践

嵌入式系统开发是连接硬件与软件的核心技术领域,其原理在于通过微控制器(如STM32)对外设进行精准控制与实时数据处理。这项技术的价值在于能够以低成本、高效率的方式实现特定功能,广泛应用于工业控制、物联网和汽车电子等场景。在汽车电子领域,盲区监测系统是提升驾驶安全的重要辅助功能,它依赖于传感器数据采集与实时处理。本文聚焦于使用STM32单片机和Proteus仿真软件,构建一个完整的汽车盲区监测与报警原型系统。通过模拟超声波传感器(HC-SR04)进行距离检测,并结合多级声光报警逻辑,该设计为嵌入式学习者、高校

weixin_34163553的博客 324

stm32——HAL库实现外部中断

初步掌握中断优先级的抢占优先级和次优先级。

only_print的博客 1646

告别理论!用STM32CubeMX和Proteus手把手教你玩转单相全桥SPWM逆变(附完整代码和仿真文件)

本文通过STM32CubeMX和Proteus实战教程,详细介绍了单相全桥SPWM逆变器的设计与实现。从环境搭建、SPWM算法优化到Proteus仿真电路设计,提供完整代码和仿真文件,帮助工程师快速掌握逆变器核心技术,适用于电力电子和嵌入式系统开发。

weixin_29174385的博客 408

基于Proteus与STM32的嵌入式系统仿真开发实战指南

在嵌入式系统开发中,仿真技术是验证硬件设计和软件逻辑的关键环节,它能有效降低开发成本、缩短调试周期。其核心原理是通过软件模拟目标硬件的行为,使开发者能在虚拟环境中运行和测试代码。这项技术的价值在于,它允许工程师在物理原型制作前,就对系统功能、算法和软硬件协同工作进行充分验证,从而规避了因设计缺陷导致的反复修改。在工业控制、智能设备等应用场景中,仿真技术尤其适用于单片机系统的前期验证。本文以STM32单片机为核心,结合Proteus仿真软件,通过一个具体的状态监测系统实例,详细拆解了从电路设计、程序编写到联合

a359798678的博客 770

STM32 HAL库常用GPIO函数以及外部中断配置与响应流程

HAL库常用GPIO函数以及外部中断配置与响应流程

stronger_manman的博客 6126

基于STM32与Proteus的汽车盲区监测系统仿真设计全流程

嵌入式系统开发是连接硬件与软件的核心技术领域,其原理在于通过微控制器(如STM32)实时采集传感器数据,并执行控制逻辑。这项技术的价值在于能够构建高可靠性、实时响应的智能设备,广泛应用于工业控制、汽车电子和物联网等领域。在汽车电子应用场景中,盲区监测系统(BSD)是提升驾驶安全的关键辅助功能,它依赖于传感器测距与实时报警机制。本文聚焦于利用**STM32单片机**和**Proteus仿真软件**,从零构建一个完整的盲区监测虚拟原型。内容涵盖系统框架设计、传感器信号处理、分级报警逻辑实现,以及在Proteus

weixin_34050519的博客 426

HAL 库STM32 GPIO中断

HAL 库GPIO中断

一个码头 861

用Proteus 8.13和STM32F103C8T6复现一个倒车雷达仿真(附完整工程文件)

本文详细介绍了如何使用Proteus 8.13和STM32F103C8T6构建倒车雷达仿真系统,包括环境准备、电路设计、程序实现及仿真调试。通过超声波测距和分级报警功能,展示了嵌入式系统开发的完整流程,适合电子工程学习者实践参考。

weixin_30687051的博客 434

【信息科学与工程学】【控制科学】第十二篇 微型计算机控制技术01

更精确的经典模型:I1在第5周期WB结束,I2最早可在第6周期进入EX,但I2在ID阶段就需要R1,因此I2的ID需在第6周期,而I1的WB在第5周期,所以I2的ID可以紧接在第6周期,但中间仍有一个stall(因为I1的EX结果要等到MEM之后才能转发给ID?有优先级继承后,Task_L被提升优先级,不会被Task_M抢占,阻塞时间缩短为Task_L剩余执行时间(9ms),仍可能超过10ms,但可通过调整任务周期或使用中断处理缓解。电感L=10μH,输出电容C=100μF,ESR=5mΩ。

weixin_49199313的博客 8628

STM32 HAL库开发学习7. GPIO输入与中断配置

CPU自动跳转到中断向量表,执行CubeMX生成的EXTI0_IRQHandler(位于stm32f1xx_it.c)。内部下拉电阻(约40kΩ)使引脚默认保持低电平,适合检测高电平有效的信号(如传感器触发高脉冲)。引脚直接连接内部施密特触发器,无上下拉电阻,适用于外部已有明确电平的场景(如接外部上拉电路)。内部上拉电阻(约40kΩ)使引脚默认保持高电平,适合检测低电平有效的信号(如按键按下接地)。当PA0检测到配置的边沿信号(上升沿/下降沿)时,触发EXTI0中断。关键代码:配置GPIO输入模式。

猿来这样-谢厂节的博客 1942

Security Onion的部署(超详细)

本文介绍了开源入侵检测系统securityonion的部署

qq_72583325的博客 6067

Proteus仿真STM32F103R6虚拟串口通信与数码管动态显示技术解析

本文详细解析了使用Proteus仿真STM32F103R6实现虚拟串口通信与数码管动态显示的技术方案。通过硬件电路设计、STM32CubeMX配置、软件编程及仿真调试的全流程讲解,帮助开发者掌握嵌入式系统中的串口数据收发与动态显示优化技术,特别适合嵌入式初学者学习实践。

pytorch8learner的博客 639

keil自动分配SDRAM空间设置使用

1.修改.sct文件。

qizhi321123的博客 1404

深入解析“PROJ: proj_create_from_database: Cannot find proj.db”错误:从环境配置到打包实战

本文深入解析了“PROJ: proj_create_from_database: Cannot find proj.db”错误的根源与解决方案,涵盖环境配置、PyInstaller打包及跨平台兼容性处理。通过详细分析PROJ库路径问题及GDAL依赖关系,提供动态路径设置、资源文件打包等实战技巧,帮助开发者高效解决地理数据处理中的常见错误。

weixin_29074409的博客 444

STM32单片机与Proteus仿真在嵌入式系统开发中的实践应用

嵌入式系统开发是连接硬件与软件的核心技术领域,广泛应用于物联网、工业控制和智能设备中。其基本原理是通过微控制器(MCU)作为核心处理单元,采集传感器数据、执行控制算法并驱动外设。在开发过程中,硬件电路的搭建与软件程序的调试往往需要反复迭代,传统方式依赖实体硬件,成本高、周期长。Proteus仿真软件的出现为这一过程带来了变革,它允许开发者在虚拟环境中进行电路设计与程序联调,实现了软硬件协同仿真。这种技术方案特别适用于电机控制、传感器数据采集和状态监控等应用场景,能够显著提升开发效率并降低前期试错成本。本文以

weixin_30564901的博客 475

嵌入式工程师成长之路(5)——板子调试

USB2514集线器调试总结说说USB连接线USB数据线上的“疙瘩”:原来有这么大用处!

云轩阁 4万+

opencode支持Proteus仿真吗?嵌入式开发场景适配性测试报告

本文介绍了如何在星图GPU平台上自动化部署opencode镜像,赋能嵌入式开发全流程。基于该平台,开发者可快速启动终端原生AI编程环境,典型应用于Proteus电路仿真场景下的STM32初始化代码生成、Keil工程结构规划及仿真报错智能诊断,显著提升硬件协同开发效率。

weixin_28793831的博客 436

【AI智能体】Codex 基于Git 实现项目管理实战操作详解

Codex 基于Git 实现项目管理实战操作详解

congge 5454

YOLO26涨点改进 | 全网独家创新!注意力改进篇 | CVPR 2025 | 引入RALA秩增强线性注意力模块,含多种创新改进,助力YOLO26适合目标检测、图像分割、图像分类有效涨点

🔥本文给大家介绍使用RALA模块改进YOLO26可以显著提升其性能,尤其在复杂场景和小物体检测中。通过增强线性注意力机制的矩阵秩,RALA改善了模型对空间信息的建模能力,提升了特征的多样性和全局信息的融合,进而提高了检测精度。同时,RALA保持了线性复杂度,避免了Softmax注意力的高计算成本,使YOLO26在实时检测任务中既能保持高效计算,又能提高检测精度,尤其是在小物体和遮挡物体的检测中表现突出。🔥欢迎订阅我的专栏、带你学习使用最新-最前沿-独家YOLO26创新改进!

Ai缝合怪、助力小伙伴高效发论文 140

复古与创新:8086跑马灯实验的现代启示录

本文探讨了8086跑马灯实验在现代嵌入式系统设计中的持续价值,通过Proteus仿真重现这一经典实验,揭示了计算机底层交互的永恒智慧。文章详细分析了8086的硬件架构和软件控制精髓,并对比了现代MCU方案,为嵌入式开发提供了实用启示。

water的专栏 634

从底层结构开始学习FPGA(8)----Block RAM(BRAM,块RAM)

BRAM作为FPGA底层的存储资源,作用很大,比如可以RAM/ROM/FIFO。

孤独的单刀 2万+

STM32使用HAL库来配置中断

一直坚持我的一句话:舞台再大,你不上台,永远是观众。平台再好,你不参与,永远是局外人。函数:HAL_GPIO_EXTI_IRQHandler()是外部中断共用的入口函数,函数内部会清除中断标志位,并调用callback回调函数。通过中断入口函数的GPIO_PIN判断来自哪个IO口的中断,然后执行中断回调函数,就在该函数里来实现中断后你想要实现的功能。主程序执行LED的闪烁,利用中断来使按键来控制LED的亮灭。参数:中断号,IRQn_Type的类型。配置中断口,配置中断触发的方式等。大概画了一下,能力有限。

m0_72442663的博客 2177

华为OD机试真题 2026-9-2【查找幸运数】

华为OD机试真题 新系统【查找幸运数】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【查找幸运数】多语言题解。

qq_45776114的博客 497

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: STM32-03基于HAL库(CubeMX+MDK+Proteus)输入检测案例(按键控制LED)
下一篇: STM32-05基于HAL库(CubeMX+MDK+Proteus)串行通信案例(中断方式接收命令)
Empty_Android
博客等级 码龄10年 98粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值