ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

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

STM32 外部中断实验(Keil 软件仿真,无需实物开发板) 实验任务3STM32外部中断实验Keil软件仿真无需实物开发板一、实验任务在前面实验基础上使用STM32标准外设库配合寄存器方式配置GPIO外部中断。模拟按键产生下降沿信号触发外部中断每次触发中断翻转LED的亮灭状态。本实验全程采用Keil MDK软件仿真不需要实物开发板。二、实验目的掌握STM32 GPIO输入输出配置方法理解AFIO复用功能的作用。理解外部中断EXTI工作原理掌握寄存器方式配置EXTI下降沿触发。掌握NVIC嵌套向量中断控制器配置学会编写中断服务函数清除中断挂起标志位。学会在Keil软件仿真环境中模拟外部信号验证中断触发效果脱离硬件完成实验验证。三、实验环境开发软件Keil MDK-ARM μVision5芯片型号STM32F103C8T6程序库STM32F10x标准外设库仿真方式Use Simulator纯软件仿真无需实物开发板引脚分配PA0外部中断输入引脚模拟按键下降沿触发中断PC13LED输出引脚中断触发时翻转电平四、实验原理STM32的GPIO引脚可以通过AFIO复用功能映射到EXTI外部中断线。本实验将PA0映射到EXTI0中断线配置为下降沿触发当PA0电平由高变低时触发中断。在中断服务函数内部翻转PC13引脚电平实现LED亮灭切换。中断触发后必须向EXTI挂起寄存器PR对应位写1清除中断标志否则会重复触发中断。本实验使用Keil内置软件仿真在电脑中模拟STM32芯片运行不需要开发板、按键、LED硬件。五、核心代码#includestm32f10x.hvoidDelay_ms(uint32_tms){uint32_ti,j;for(i0;ims;i)for(j0;j7200;j);}voidLED_Init(void){GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStruct.GPIO_PinGPIO_Pin_13;GPIO_InitStruct.GPIO_ModeGPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_SpeedGPIO_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_PinGPIO_Pin_0;GPIO_InitStruct.GPIO_ModeGPIO_Mode_IPU;GPIO_Init(GPIOA,GPIO_InitStruct);AFIO-EXTICR[0]~(0x000F);EXTI-FTSR|(1U0);EXTI-IMR|(1U0);NVIC-ISER[0]|(1U6);NVIC-IP[6](1U4);}voidEXTI0_IRQHandler(void){if((EXTI-PR(1U0))!0){GPIO_WriteBit(GPIOC,GPIO_Pin_13,!GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_13));EXTI-PR|(1U0);}}intmain(void){LED_Init();EXTI0_Init();while(1){}}六、实验步骤在任务2的Keil工程基础上替换led_main.c为本次外部中断代码。Rebuild重新编译工程查看Build Output窗口确认0 Errors。打开魔术棒Options for Target切换Debug选项卡选择Use Simulator勾选Run to main()保存配置。点击Debug按钮进入软件仿真模式程序停在main函数入口。点击Run全速运行程序。在仿真界面手动修改PA0引脚电平制造下降沿触发EXTI0中断观察PC13电平翻转。说明新版Keil MDK逻辑分析仪存在bug无法抓取GPIO波形采用信号逻辑示意图描述中断触发过程。七、实验结果代码编译成功无错误。Keil软件仿真正常运行主循环循环等待中断事件。当PA0引脚产生下降沿时触发EXTI0外部中断进入中断服务函数PC13引脚电平翻转LED亮灭切换。本实验全程使用纯软件仿真无需实物开发板成功验证外部中断功能。八、实验总结本次实验使用标准库配置GPIO配合寄存器方式完成EXTI外部中断配置。AFIO负责把GPIO引脚映射到中断线EXTI寄存器配置中断触发方式NVIC负责中断使能与优先级。中断服务函数中必须对PR寄存器写1清除中断挂起标志否则会持续触发中断。软件仿真可以在没有硬件的条件下验证代码逻辑但是仿真环境和真实硬件存在一定差异。
返回列表