微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32F051 写外部中断步骤

STM32F051 写外部中断步骤

时间:12-02 来源:互联网 点击:
STM32F051的中断特性如下:

Cortex - M0的中断系统比较复杂,要想系统能响应中断,整体的配置步骤也多,下面以GPIOA0外接一个BUTTON,电路如下:

设置中断的步骤如下:

void SysInitConfig(void) //中断寄存器配置,及中断引脚的配置

{

RCC->AHBENR |= 1<17; //使能GPIOA的时钟

GPIOA->MODER &= ~(0x03<1);//置GPIOA0为输入模式

RCC->APB2ENR |= 1<0; //使能SYSCFG时钟

SYSCFG->EXTICR[0] = 0<0; //配置GPIOA0为外部中断0

EXTI->IMR |=1<0; //打开线0上的中断请求

EXTI->RTSR |=1<0; //设置GPIOA0上升沿触发

NVIC_EnableIRQ (EXTI0_1_IRQn); //允许外部中断0、1

NVIC_SetPriority ( EXTI0_1_IRQn, 2); //设置外部中断0、1的中断优先级别

}

int main (void)

{

SysInitConfig();

……

while (1); //等待中断

}

void EXTI0_1_IRQHandler (void) //中断入口程序

{

EXTI->PR = 1<0 ; //清除PR挂起位

……

}

经以上配置,就可以将PA0作为外部中断了。只是如何启用了多个外部中断,比如启用了中断0、中断1的话,他们共用一个中断入口地址,所以需要在进入中断后,判断一下是来自那个线的中断即可。

中断程序中EXTI->PR = 1<0 ;这语句必须启用,不然老是中断返回后又进入中断。因为Cortex - M0芯片允许中断一直挂起。

NVIC_EnableIRQ (EXTI0_1_IRQn); //允许外部中断0、1

NVIC_SetPriority ( EXTI0_1_IRQn, 2); //设置外部中断0、1的中断优先级别

这两个函数定义来自于文件core_cm0.h。

STM32F0xxx Cortex-M0 programming manual》中对中断有如下的定义:

更多更多关于异常和NVIC 编程的说明请参考《STM32F0xxx Cortex-M0 programming manual》。

各个中断的入口程序的怎么写?
在KEIL自带的启动文件中有描述。


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

网站地图

Top