微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32裸机开发—外部中断

STM32裸机开发—外部中断

时间:11-20 来源:互联网 点击:
a. 初始化IO口作为输入

这一步需要设置你要作为外部中断输入的IO口的状态,可以设置为上拉/下拉输入,也可以设置为浮空输入,但浮空的时候外部硬件一定要上拉或下拉。否则可能导致中断不停地被触发。在干扰较大的地方,就算使用了上拉/下拉,也建议在外部硬件上设置上拉/下拉,这样可以在一定程度上防止外部干扰带来的影响。

*RCC_APB2ENR=0x00000019;//打开portb和portc的时钟和复用时钟

*PORTA_CRL=0x44444844;//设置PA2口为上拉/下拉输入模式

由于还需要驱动液晶屏所以同时打开了PORTB和PORTC的时钟。

b. 开启IO口复用时钟,设置IO口与中断线的映射关系

STM32的IO口与中断线的对应关系需要配置外部中断配置寄存器EXTICR,这样我们要先开启复用时钟,然后配置IO口与中断线的对应关系。才能把外部中断与中断线连接起来。从图中看到一共有19条中断线(EXTIx),几号端口就是几号中断线。这里PA2显然就是EXTI2线。

*AFIO_EXTICR1=0x00000000;//打开PA2口的复用设置

c. 开启与该IO口相对的线上中断事件,设置触发条件

这一步,我们要配置中断产生的条件,STM32可以配置成上升沿触发,下降沿触发,或者任意电平变化触发,但是不能配置成高电平和低电平触发。这里要根据自己的实际情况来配置。同时要开启中断线上的中断,这里需要注意的是,如果使用外部中断,并设置该中断的EMR位的话,会引起软件仿真上不能转到中断,而硬件上是可以的。而不设置EMR,软件仿真就可以进入中断服务函数,并且硬件上也是可以的。建议不要配置EMR位。从图中可以看到,要进入NVIC interrupt controller必须要设置中断屏蔽寄存器。挂起请求寄存器从目前的理解来看应该是在硬件中断的时候接到中断事件就自动置1,中断被处理了就置0,可以通过写该寄存器来实现软中断,故在这里没有进行设置。

*EXTI_IMR=0x00000004;//打开PA2的中断屏蔽

*EXTI_FTSR=0x00000004;//设置为下降沿触发


d. 配置中断分组(NVIC),并使能中断

这一步,我们就是配置中断的分组,以及使能,对于STM32来说,只有配置了NVIC的设置,并开启才能被执行,否则是不会执行到中断服务函数里面去的。对于裸机开发来说,ST半导体的STM32参考手册中没有标明NVIC寄存器的地址,如下图,直接标成了reserved。事实上NVIC寄存器已经是CM3的私房外设了。通过看论坛上的讨论知道了在ARM发布的Cortex-M3 Technical Reference Manual (r2p0)中能找到。NVIC寄存器组主要有Interrupt Set-Enable Registers,Interrupt Clear-Enable Registers,Interrupt Set-Pending Register,Interrupt Clear-Pending Register,Active Bit Register,Interrupt Priority Registers。这里重点要关心的是Interrupt Set-Enable Registers,因为它是用来设置中断通道使能的,不设置的话中断服务函数不会响应。它的地址是0xE000E100。EXTI2的中断向量号为8(查询中断向量表),所以代码如下:

*NVIC_ISER=0x00000100;//打开EXTI线2中断



e. 写中断服务函数

举个例子:

void EXTI2_IRQHandler(void)

{

drawwin8();

}

中断服务函数的格式大概就是 void XXXX(中断名称)_IRQHandler()。中断名称直接查手册上的中断向量表。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top