×
单片机 > 单片机程序设计 > 详情

STM32F051 写外部中断步骤

发布时间:2020-08-27 发布时间:
|
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自带的启动文件中有描述。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何为单片机选择合适的负载电容