STM32学习问题记录(2)--EXTI中断

1.总中断


问题:stm32默认开始总中断?还不清楚,但应该是。

在STM32/Cortex-M3中是通过改变CPU的当前优先级来允许或禁止中断。 PRIMASK位:只允许NMI和hard fault异常,其他中断/ 异常都被屏蔽(当前CPU优先级=0)。 FAULTMASK位:只允许NMI,其他所有中断/异常都被屏蔽(当前CPU优先级=-1)。 在STM32固件库中(stm32f10x_nvic.c和stm32f10x_nvic.h) 定义了四个函数操作PRIMASK位和FAULTMASK位,改变CPU的当前优先级,从而达到控制所有中断的目的。
下面两个函数等效于关闭总中断:
void NVIC_SETPRIMASK(void);
void NVIC_SETFAULTMASK(void);
下面两个函数等效于开放总中断:
void NVIC_RESETPRIMASK(void);
void NVIC_RESETFAULTMASK(void);
上面两组函数要成对使用,不能交叉使用。
例如: 第一种方法:
NVIC_SETPRIMASK(); //关闭总中断
NVIC_RESETPRIMASK();//开放总中断
第二种方法:
NVIC_SETFAULTMASK(); //关闭总中断
NVIC_RESETFAULTMASK();//开放总中断
常常使用
NVIC_SETPRIMASK(); // Disable Interrupts
NVIC_RESETPRIMASK(); // Enable Interrupts
-------------------------------------------------------------------------------------------------
在3.0的库中 已经没有 第一种方法:
NVIC_SETPRIMASK(); //关闭总中断
NVIC_RESETPRIMASK();//开放总中断
第二种方法: NVIC_SETFAULTMASK(); //关闭总中断
NVIC_RESETFAULTMASK();//开放总中断
补充 可以用 #define CLI() __set_PRIMASK(1) #define SEI() __set_PRIMASK(0) 来实现


2.EXTI中断

中断优先级如下图

外部函数中断线名称,这是重点,就是中断线的共用问题,后续中断线公用。

3.中断初始化函数解析

(1)首先定义结构体;
  (2) 开启PA和PE时钟;
(3)设置相应的中断源( 貌似只能设置一个?不清楚,后续再查
(4)设置相应的IO;
(5)配置中断要求等;( 问题:EXTI为唯一寄存器,就是不针对个别io,这个和EXTI0-EXTI15不同,在这里有问题,若多中断需要每次修改嘛?在后续学习中应该可以解答!若有同学清楚可留言,谢谢~~~


猜你喜欢

转载自blog.csdn.net/vca821/article/details/80473960