【STM32】NVIC EXTI 外部中断详解【原理】-Jojo

前注:本文章主要讲解【原理】

内容为 'Jojo'编写,日常学习总结,内容如有不足、不妥之处请私信告知,谢谢!

实验 

实验配置

A.硬件原理

Cortex-M3的中断和优先级

STM32的中断和优先级

EXTI外部中断

一、Cortex-M3 的中断和优先级

        正常情况下,微处理器根据代码内容,按顺序执行指令。执行过程中,如果遇到其它紧急的事件需要处理,则先暂停当前任务,执行紧急事件,待紧急事件处理完后,再恢复到刚才暂停的地方继续执行。这个产生的紧急事件就叫做中断或异常

通常,把 CPU 内部产生的紧急事件叫做 异常 ,比如非法指令(除零)、地址访问越界等;
把来自 CPU 外部的片上外设产生的紧急事件叫做 中断 ,比如GPIO 引脚电平变化、定时器溢出等。异常和中断的效果基本一致,都是暂停当前任务,优先执行紧急事件,因此一般将中断和异常统称为中断。

NVIC

Cortex-M3 内核有一个专门管理中断的外设 NVIC Nested Vectored Interrupt Controller , 嵌套向量中断控制器),通过优先级控制中断的嵌套和调度。NVIC 是一个总的中断控制器,无论是来在内 核的异常还是外设的外部中断,都由NVIC 统一进行管理。
Cortex-M3 中,将优先级拆分为抢占优先级( Preempt Priority )和子优先级( Subpriority ),每个中断都需要指定这两级,具有高优先级的中断可以打断低优先级的中断,实现中断嵌套。

所有可编程的中断都需要指定抢占优先级和子优先级,抢占优先级决定是否可以产生中断嵌套,子优先 级决定中断响应顺序,若两种优先级一样则看中断在中断异常表中的位置, 越靠前越先响应

二、STM32 的中断和优先级

Cortex-M3 设计有 256 种中断,但大多数 MCU 都用不到这么多中断,比如 STM32F103
系列就只有 70 种异常和中断,其中前 10 个是系统异常,后面 60 个是外部中断,

系统异常

 外部中断

 

 优先级

 

1) NVIC_PRIORITYGROUP_0 0 位抢占式优先级, 4 位响应优先级;
2) NVIC_PRIORITYGROUP_1 1 位抢占式优先级, 3 位响应优先级;
3) NVIC_PRIORITYGROUP_2 2 位抢占式优先级, 2 位响应优先级; 
4) NVIC_PRIORITYGROUP_3 3 位抢占式优先级, 1 位响应优先级;
5) NVIC_PRIORITYGROUP_4 4 位抢占式优先级, 0 位响应优先级;
STM32F103 的异常和中断,基于 Cortex-M3 修改而来,前面的系统异常部分几乎没有变化,外部中断则对应不同的外设 同样,STM32F103 也继承了 Cortex-M3 的中断优先级规则,因为中断少了很多,中断优先级也用不了那 么多,只使用了PRI_n Bits[7:0] 中的 Bits[7:4] 设置优先级。

三、EXTI外部中断

STM32F103 系列的 EXTI 支持 19 个外部中断 / 事件请求(互联型系列的 STM32 支持 20 个),每个中断 / 事件
都有独立的触发和屏蔽设置,支持中断模式和事件模式。
中断模式 是指外部信号产生电平变化时, EXTI 将该信号给 NVIC 处理,从而触发中断,执行中断服务函 数,完成对应操作。
事件模式 是指外部信号产生电平变化时,EXTI 根据配置,联动 ADC TIM 执行相关操作。

EXTI功能框图

对应上面蓝色框

 中断线路

输入线:

EXTI 控制器有 19 个中断 / 事件输入线,这些输入线可以通过寄存器
设置为任意一个 GPIO,也可以是一些外设的事件,输入线一般是存在电平变化的信号。

 边沿检测电路:

通过设置上升沿触发选择寄存器(EXTI_RTSR)下降沿触发选择寄存器(EXTI_FTSR)对应位的设置来控制信号触发。

在写EXTI_RTSR寄存器时,在外部中断线上的上升沿信号不能被识别,挂起位也不会被置位。(F4挂起位会被置位)

如果在向 EXTI_FTSR 寄存器写入值的同时外部中断线上产生下降沿,挂起位不会被置位 

在同一中断线上,可以同时设置上升沿和下降沿触发。即任一边沿都可触发中断 

 总结:可以是只有上升沿触发、只有下降沿触发或者上升沿和下降沿都触发。

 

 或门电路:

一个输入来自 边沿检测电路触发 ,另外一个输入来自 软件中断事件寄存器 (EXTI_SWIER)
总结:或门电路 两个输入中有一个为‘1’,都会输出一

 

 与门电路:

它一个输入是编号 3 (请求挂起位置) 电路,另外一个输入来自 中断屏蔽寄存器 (EXTI_IMR)

 总结:中断屏蔽寄存器(EXTI_IMR)具有一票否决权,决定是否开启此线的中断

 至NVIC中断控制器:

EXTI_PR 寄存器内容输出到 NVIC 内,从而实现系统中断事件控制。

事件线路

产生事件线路是在编号 3 电路之后与中断线路有所不同,之前电路都是共用的。

:与门电路:

它一个输入来自编号 3 电路,另外一个输入来自 事件屏蔽寄存器 (EXTI_EMR)。

  总结:事件屏蔽寄存器 (EXTI_EMR)具有一票否决权,决定是否开启此线的事件发生

 脉冲发生器电路:

当它的输入端,即编号 6 电路的输出端,是一个有效
信号 1 时就会产生一个脉冲;如果输入端是无效信号就不会输出脉冲。
一个脉冲信号:
是产生事件的线路最终的产物,这个脉冲信号可以给其他
外设电路使用,比如定时器 TIM 、模拟数字转换器 ADC 等等,这样的脉冲信号一般用来
触发 TIM 或者 ADC 开始转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值