STM32外部中断实战教程 - 保姆级指南

2 下载量 59 浏览量 更新于2024-08-29 收藏 1.17MB PDF 举报
该资源是一篇关于STM32嵌入式系统中外部中断EXTI的实现教程,适合初学者理解外部中断的工作原理和配置方法。文章提供了完整的EXTI初始化代码,并详细解释了每一行代码的功能。 STM32的外部中断(EXTI)允许微控制器对外部事件作出响应,例如按钮的按下或释放。在提供的代码中,作者展示了如何初始化EXTI0中断,用于处理来自GPIOA端口0号引脚的中断请求。 首先,`RCC->APB2ENR|=1<<2;`这行代码开启了APB2总线上的GPIOA时钟,这是使用GPIOA端口前的必要步骤,因为所有GPIO操作都需要相应的时钟使能。 接着,代码配置了GPIOA的配置寄存器CRL。`GPIOA->CRL|=1<<2;`、`GPIOA->CRL&=~(1<<2);`、`GPIOA->CRL&=~(1<<1);`这些语句设置了GPIOA的0号引脚为输入模式,并选择上拉/下拉输入。`GPIOA->ODR&=~(1<<0);`这行代码将ODR寄存器的第0位置0,设定为下拉输入模式,意味着在没有外部信号时,该引脚保持高电平。 然后,代码涉及到了NVIC(Nested Vector Interrupt Controller,嵌套向量中断控制器)的配置。`NVIC_SetPriorityGrouping(5);`设置了中断优先级分组,这里的5表示2个抢占优先级和3个子优先级。`NVIC_EnableIRQ(EXTI0_IRQn);`和`NVIC_SetPriority(EXTI0_IRQn,10);`分别启用了EXTI0中断并设置了其优先级为10,优先级数值越小,优先级越高。 在EXTI配置部分,`EXTI->IMR|=1<<0;`使能了EXTI0中断线,`EXTI->EMR|=1<<0;`使能了EXTI0的事件模式,`EXTI->RTSR|=1<<0;`则配置EXTI0为上升沿触发。中断发生后,`EXTI->PR|=1<<0;`这行代码清除中断标志,使得中断可以再次被触发。 最后,`EXTI.h`头文件中定义了函数原型`void KEY_EXTI_Init(void);`,并在`EXTI.c`中实现了该函数,当EXTI0中断触发时,会执行`EXTI0_IRQHandler`函数,该函数中通过`PBout(5)=~PBout(5);`翻转LED的状态来响应中断事件。 这段代码展示了如何在STM32中配置和处理外部中断,包括GPIO的初始化、NVIC的中断配置以及EXTI模块的设置,对于学习STM32中断系统有很好的指导作用。