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自带的启动文件中有描述。
STM32F051外部中 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)