news 2026/9/30 3:33:42

STM32 外部中断实验(Keil 软件仿真,无需实物开发板)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32 外部中断实验(Keil 软件仿真,无需实物开发板)

实验任务3:STM32外部中断实验(Keil软件仿真,无需实物开发板)

一、实验任务

在前面实验基础上,使用STM32标准外设库配合寄存器方式配置GPIO外部中断。模拟按键产生下降沿信号触发外部中断,每次触发中断翻转LED的亮灭状态。本实验全程采用Keil MDK软件仿真,不需要实物开发板。

二、实验目的

  1. 掌握STM32 GPIO输入输出配置方法,理解AFIO复用功能的作用。
  2. 理解外部中断EXTI工作原理,掌握寄存器方式配置EXTI下降沿触发。
  3. 掌握NVIC嵌套向量中断控制器配置,学会编写中断服务函数,清除中断挂起标志位。
  4. 学会在Keil软件仿真环境中模拟外部信号,验证中断触发效果,脱离硬件完成实验验证。

三、实验环境

  • 开发软件:Keil MDK-ARM μVision5
  • 芯片型号:STM32F103C8T6
  • 程序库:STM32F10x标准外设库
  • 仿真方式:Use Simulator纯软件仿真,无需实物开发板
  • 引脚分配:
    PA0:外部中断输入引脚,模拟按键,下降沿触发中断
    PC13:LED输出引脚,中断触发时翻转电平

四、实验原理

STM32的GPIO引脚可以通过AFIO复用功能映射到EXTI外部中断线。本实验将PA0映射到EXTI0中断线,配置为下降沿触发,当PA0电平由高变低时触发中断。
在中断服务函数内部,翻转PC13引脚电平,实现LED亮灭切换。中断触发后必须向EXTI挂起寄存器PR对应位写1,清除中断标志,否则会重复触发中断。
本实验使用Keil内置软件仿真,在电脑中模拟STM32芯片运行,不需要开发板、按键、LED硬件。

五、核心代码

#include"stm32f10x.h"voidDelay_ms(uint32_tms){uint32_ti,j;for(i=0;i<ms;i++)for(j=0;j<7200;j++);}voidLED_Init(void){GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStruct);GPIO_ResetBits(GPIOC,GPIO_Pin_13);}voidEXTI0_Init(void){GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOA,&GPIO_InitStruct);AFIO->EXTICR[0]&=~(0x000F);EXTI->FTSR|=(1U<<0);EXTI->IMR|=(1U<<0);NVIC->ISER[0]|=(1U<<6);NVIC->IP[6]=(1U<<4);}voidEXTI0_IRQHandler(void){if((EXTI->PR&(1U<<0))!=0){GPIO_WriteBit(GPIOC,GPIO_Pin_13,!GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_13));EXTI->PR|=(1U<<0);}}intmain(void){LED_Init();EXTI0_Init();while(1){}}

六、实验步骤

  1. 在任务2的Keil工程基础上,替换led_main.c为本次外部中断代码。

  2. Rebuild重新编译工程,查看Build Output窗口,确认0 Errors。

  3. 打开魔术棒Options for Target,切换Debug选项卡,选择Use Simulator,勾选Run to main(),保存配置。

  4. 点击Debug按钮进入软件仿真模式,程序停在main函数入口。>

  5. 点击Run全速运行程序。在仿真界面手动修改PA0引脚电平,制造下降沿,触发EXTI0中断,观察PC13电平翻转。>

说明:新版Keil MDK逻辑分析仪存在bug,无法抓取GPIO波形,采用信号逻辑示意图描述中断触发过程。

七、实验结果

  1. 代码编译成功,无错误。
  2. Keil软件仿真正常运行,主循环循环等待中断事件。
  3. 当PA0引脚产生下降沿时,触发EXTI0外部中断,进入中断服务函数,PC13引脚电平翻转,LED亮灭切换。
  4. 本实验全程使用纯软件仿真,无需实物开发板,成功验证外部中断功能。

八、实验总结

本次实验使用标准库配置GPIO,配合寄存器方式完成EXTI外部中断配置。AFIO负责把GPIO引脚映射到中断线,EXTI寄存器配置中断触发方式,NVIC负责中断使能与优先级。中断服务函数中必须对PR寄存器写1清除中断挂起标志,否则会持续触发中断。软件仿真可以在没有硬件的条件下验证代码逻辑,但是仿真环境和真实硬件存在一定差异。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 3:33:21

H3C GB0-620超融合认证题库核心考点解析:从虚拟化到分布式存储

简介&#xff1a;这是H3C UIS超融合GB0-620认证的配套题库复习文档&#xff0c;面向备考H3C UIS-Cell超融合产品认证的工程师与运维人员&#xff0c;用于快速梳理超融合架构、虚拟化原理、分布式存储与一体化平台操作要点。资料以选择题解析形式覆盖虚拟化技术、SSD缓存、集群部…

作者头像 李华
网站建设 2026/9/30 3:32:51

YOLO目标检测原理:从单次推理到空间关系建模

1. 为什么YOLO不是“又一个目标检测模型”&#xff0c;而是改变了整个工业落地节奏的分水岭你可能已经见过太多目标检测的演示视频&#xff1a;摄像头画面里&#xff0c;小汽车、行人、红绿灯被一个个带标签的方框精准圈出&#xff0c;帧率稳定在30fps以上&#xff0c;边缘不抖…

作者头像 李华
网站建设 2026/9/30 3:31:59

DQL详解:从SELECT语法到执行顺序、JOIN与窗口函数优化

1. DQL是什么&#xff0c;为什么值得花一整篇讲清楚SQL这门语言&#xff0c;入门容易&#xff0c;精通很难。今天要聊的是DQL&#xff08;Data Query Language&#xff09;——数据查询语言&#xff0c;翻译成人话就是SELECT那一整套东西。如果你翻过教科书&#xff0c;DQL通常…

作者头像 李华
网站建设 2026/9/30 3:31:59

从伐木工到二分答案:单调性、整数二分与溢出边界

第一次在题单里翻到这道编号 1908 的"伐木工"&#xff0c;我下意识觉得这是道模拟题——题目描述那么直白&#xff0c;照着砍一遍不就行了&#xff1f;可等我把数据范围那一栏读完&#xff0c;这个念头立刻被打消了。树的数量动辄上万&#xff0c;单棵树的高度又能到…

作者头像 李华
网站建设 2026/9/30 3:31:27

PyQt5桌面天气应用开发实战:从API接入到打包发布全流程

最近各种工具都在往桌面端挤&#xff0c;AI 编程助手出桌面版、大模型客户端出桌面版&#xff0c;GitHub Desktop、Docker Desktop 这些老牌工具更不用说了。这股风潮带火了一个问题&#xff1a;桌面端软件到底怎么做&#xff1f;我正好花两个晚上搓了一个桌面版天气预报应用&a…

作者头像 李华
网站建设 2026/9/30 3:31:11

Excel手搓概率纸图:中位秩、NORM.S.INV与B10寿命计算

手里的数据就那么几组&#xff0c;想看看它们是不是服从正态分布&#xff0c;或者想估个 B10 寿命&#xff0c;最直观的干法是画一张概率纸图。可现实是&#xff0c;概率纸这玩意儿现在很难买到&#xff0c;就算买到&#xff0c;手描点也基本靠肉眼&#xff0c;误差大得离谱。所…

作者头像 李华