看了一天的stm32的中斷配置,對NVIC有了基本的了解(要了解NVIC,可以看《cortex M3權(quán)威指南》)??偨Y(jié)為3步:
1.設(shè)置中斷分組寄存器 AIRCR 共0~4五組。地址:0xe000E_d00C
2.設(shè)置對應(yīng)中斷優(yōu)先級 NVIC->IPR[x] x=0~15配置60個中斷優(yōu)先級,每個中斷一字節(jié)控制,只用到高4位 地址:0xE000_E400
3.使能對應(yīng)中斷 NVIC->ISER[x] x=0~1 每一位對應(yīng)一個外部中斷使能 地址:0xE00_E100
void exti_init()//外部中斷15~10 中斷編號:40
{
RCC->APB2ENR|=1<<0; //開啟復(fù)用時鐘
RCC->APB2ENR|=1<<2;//使能PA時鐘
GPIOA->CRH&=0x0f0fffff; //PA13,PA15輸入
GPIOA->CRH|=0x80800000;
GPIOA->ODR|=1<<13; //PA13上拉
GPIOA->ODR|=1<<15; //PA15上拉
AFIO->MAPR&=0xf8ffffff;//關(guān)閉JTAG,關(guān)閉SW
AFIO->MAPR|=0x04000000;
AFIO->EXTICR[3]=0x0000;//設(shè)置PA13,15為中斷輸入源
EXTI->IMR|=1<<13; //開放線中斷請求
EXTI->IMR|=1<<15;
EXTI->FTSR|=1<<13;//設(shè)置為下降沿觸發(fā)
EXTI->FTSR|=1<<15;
Set_NVIC_Group(2);//配置中斷分組0~4
NVIC->IPR[10]|=9<<4;//搶斷優(yōu)先級1,子優(yōu)先級為1 0xe000_e400 高4位設(shè)置優(yōu)先級
NVIC->ISER[1]|=1<<8;//使能中斷
}
void Set_NVIC_Group(u8 Group)//設(shè)置中斷優(yōu)先級分組寄存器
{
u32 temp,temp1;
temp1=(~Group)&0x07;//取后三位
temp1<<=8;
temp=SCB->AIRCR; //讀取先前的設(shè)置
temp&=0X0000F8FF; //清空先前分組
temp|=0X05FA0000; //寫入鑰匙
temp|=temp1;
SCB->AIRCR=temp; //設(shè)置分組 寄存器地址0xe000ed00c 可以看cortex m3權(quán)威指南
}
void EXTI15_10_IRQHandler(void)//外部中斷服務(wù)程序
{
}