STM32 每个 GPIO 都可以做为中断输入引脚,另外还有一些内部资源中断,比如定时器中断, ADC 中断、 DMA 中断等等。外部引脚中断可设置为多种模式,比如上升沿触发、下降沿触发、电平触发等等模式。

什么是中断:就好像人在吃饭,吃到一半有个电话打进来(中断源),然后去接电话(中断处理),接完电话以后继续刚才吃饭。

STM32的中断处理机制是NVIC,NVIC 寄存器定义在 core_cm3.h 文件中。

STMF1XX 中断学习

在配置中断的时候我们一般只用 ISER、 ICER 和 IP 这三个寄存器, ISER 用来
使能中断, ICER 用来失能中断, IP 用来设置中断优先级。

ISER[8]: ISER 全称是: Interrupt Set-Enable Registers,这是一个中断使能寄存
器组。上面说了 CM3 内核支持 256 个中断,这里用 8 个 32 位寄存器来控制,
每个位控制一个中断。但是 STM32F103 的可屏蔽中断只有 60 个,所以对我们来
说,有用的就是两个(ISER[0]和 ISER[1]),总共可以表示 64 个中断。而 STM32F103
只用了其中的前 60 位。ISER[0]的 bit0~bit31 分别对应中断 0~31。ISER[1]的 bit0~27
对应中断 32~59;这样总共 60 个中断就分别对应上了。你要使能某个中断,必
须设置相应的 ISER 位为 1,使该中断被使能(这里仅仅是使能,还要配合中断分
组、屏蔽、 IO 口映射等设置才算是一个完整的中断设置)。

ICER[8]:全称是: Interrupt Clear-Enable Registers,是一个中断除能寄存器组。
该寄存器组与 ISER 的作用恰好相反,是用来清除某个中断的使能的。其对应位
的功能,也和 ISER 一样。这里要专门设置一个 ICER 来清除中断位,而不是向 ISER
写 0 来清除,是因为 NVIC 的这些寄存器都是写 1 有效的,写 0 是无效的。具体
为什么这么设计,请看《Cortex-M3 权威指南 Cn》。

IP[240]:全称是: Interrupt Priority Registers,是一个中断优先级控制的寄存
器组。这个寄存器组相当重要! STM32 的中断分组与这个寄存器组密切相关。 IP
寄存器组由 240 个 8bit 的寄存器组成,每个可屏蔽中断占用 8bit,这样总共可
以表示 240 个可屏蔽中断。而 STM32 只用到了其中的前 60 个。 IP[59]~IP[0]分别
对应中断 59~0。而每个可屏蔽中断占用的 8bit 并没有全部使用,而是只用了高
4 位
, 又分为抢占优先级和子优先级。抢占优先级在前,
子优先级在后。而这两个优先级各占几个位又要根据 SCB->AIRCR 中的中断分组
设置来决定。


NVIC相关函数:

设置中断优先级组
STMF1XX 中断学习

 

设置中断优先级:
STMF1XX 中断学习

 

使能中断
STMF1XX 中断学习

禁用中断
STMF1XX 中断学习

系统复位
STMF1XX 中断学习

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 


 

相关文章:

  • 2021-08-20
  • 2021-06-03
  • 2021-07-01
  • 2021-06-22
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-12-24
  • 2022-12-23
  • 2021-12-31
  • 2021-04-13
  • 2021-05-12
  • 2021-04-06
  • 2021-10-29
相关资源
相似解决方案