标题:
怎么无法修改stm32中断分组配置寄存器?
[打印本页]
作者:
小蜜蜂o
时间:
2016-7-30 17:51
标题:
怎么无法修改stm32中断分组配置寄存器?
修改的时候有同时写入0x05fa0000啊,后边测试,一直无法抢占优先级,while(1)中重新读取AIRCR这个内容,发现没有修改成功,分组配置还是上电复位时默认的。
#include<stm32f10x.h>
void delay(u32 z)
{
while(z--);
}
int main()
{
u32 temp;
// RCC->APB2ENR|=(1<<6);//启动端口E的时钟//不能打开这个时钟,否则出错!!!
GPIOE->CRL|=0X000ccc00;//io口234为上拉输入模式
EXTI->IMR|=(1<<4)|(1<<3)|(1<<2);//允许外部中断432中断请求
EXTI->FTSR|=(1<<4)|(1<<3)|(1<<2);//下降沿触发
NVIC->ISER[0]|=(1<<10)|(1<<9)|(1<<8);//打开nvic的外部中断432允许请求
temp=(SCB->AIRCR)&0x0000f8ff;//aircr寄存器中断分组清零
temp=temp|(1<<10)|(1<<9);//设置为组1模式
temp|=0x05FA0000;//写入钥匙
SCB->AIRCR=temp;//设置中断分组:1位抢占优先级,3位响应优先级
NVIC->IP[0]|=0X80800000;//设置中断3.2优先级:抢占优先级1,响应优先级0
NVIC->IP[1]=0X00000070;//中断 4优先级:抢占式优先级0,响应优先级7
RCC->APB2ENR|=0X01;
AFIO->EXTICR[0]|=0X4400;
AFIO->EXTICR[1]|=0X04; //打开afio时钟,设置pe234为外部中断
RCC->APB2ENR|=(1<<4);
GPIOC->CRL|=0X22222222;
GPIOC->BSRR=0XFF;//初始化led灯的io口
while(1)
{
GPIOC->BSRR=(SCB->AIRCR)>>8;//发现aircr寄存器无法写入,依然是上电默认值
}
}
//以下3个外部中断函数均为led灯的闪烁操作
void EXTI2_IRQHandler()
{
delay(6000000);
GPIOC->BRR=0XFF;
delay(6000000);
GPIOC->BSRR=0XFF;
delay(6000000);
GPIOC->BRR=0XFF;
delay(6000000);
GPIOC->BSRR=0XFF;
delay(6000000);
GPIOC->BRR=0XFF;
delay(6000000);
GPIOC->BSRR=0XFF;
EXTI->PR|=(1<<2);//清除外部中断标志
}
void EXTI3_IRQHandler()
{
delay(6000000);
GPIOC->BRR=0XFF;
delay(6000000);
GPIOC->BSRR=0XFF;
delay(6000000);
GPIOC->BRR=0XFF;
delay(6000000);
GPIOC->BSRR=0XFF;
delay(6000000);
GPIOC->BRR=0XFF;
delay(6000000);
GPIOC->BSRR=0XFF;
EXTI->PR|=(1<<3);
}
void EXTI4_IRQHandler()
{
delay(600000);
GPIOC->BRR=0XFF;
delay(600000);
GPIOC->BSRR=0XFF;
delay(600000);
GPIOC->BRR=0XFF;
delay(600000);
GPIOC->BSRR=0XFF;
EXTI->PR|=(1<<4);
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1