历史上的今天
今天是:2024年12月29日(星期日)
2020年12月29日 | STM32 中断详解
2020-12-29 来源:eefocus
1 EXTI控制器
每个中断/事件线上都具有独立的触发和屏蔽
每个中断线都具有专用的状态位
支持多达23个软件事件/中断请求
检测脉冲宽度低于APB2 时钟宽度的外部信号
2 NVIC控制器
void NVIC_PRIGroup_Enable(uint32_t NVIC_PRIGroup)
{
/*Set the priority grouping value */
SCB->AIRCR =AIRCR_VECTKEY_MASK | NVIC_PRIGroup;
}
* ==========================================================================================================================
* NVIC_PriorityGroup | NVIC_IRQChannelPreemptionPriority |NVIC_IRQChannelSubPriority | Description
* ==========================================================================================================================
* NVIC_PriorityGroup_0 | 0 | 0-15 | 0 bits for pre-emption priority
* | | | 4 bits for subpriority
* --------------------------------------------------------------------------------------------------------------------------
* NVIC_PriorityGroup_1 | 0-1 | 0-7 | 1 bits for pre-emption priority
* | | | 3 bits for subpriority
* --------------------------------------------------------------------------------------------------------------------------
* NVIC_PriorityGroup_2 | 0-3 | 0-3 | 2 bits for pre-emption priority
* | | | 2 bits for subpriority
* --------------------------------------------------------------------------------------------------------------------------
* NVIC_PriorityGroup_3 | 0-7 | 0-1 | 3 bits for pre-emption priority
* | | | 1 bits for subpriority
* --------------------------------------------------------------------------------------------------------------------------
* NVIC_PriorityGroup_4 | 0-15 | 0 | 4 bits for pre-emption priority
* | | | 0 bits for subpriority
* ==========================================================================================================================
抢占优先级& 响应优先级区别
高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。
抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。
抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。
如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行。
例子:
假定设置中断优先级组为2,然后设置
中断3(RTC中断)的抢占优先级为2,响应优先级为1。
中断6(外部中断0)的抢占优先级为3,响应优先级为0
中断7(外部中断1)的抢占优先级为2,响应优先级为0。
那么这3个中断的优先级顺序为:中断7>中断3>中断6
表现在代码中
NVIC_InitPara NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQ = IRQn;
NVIC_InitStructure.NVIC_IRQPreemptPriority =pri;
NVIC_InitStructure.NVIC_IRQSubPriority = pri1;
NVIC_InitStructure.NVIC_IRQEnable = ENABLE;
NVIC_Init(&NVIC_InitStructure);
分组0,那么pri的取值范围0~0,pri1的取值范围0~16
分组2,那么pri的取值范围0~4,pri1的取值范围0~4
分组4,那么pri的取值范围0~16,pri1的取值范围0~0
下面我们讲解一下NVIC寄存器

__IO uint8_t IP[240]; //中断优先级控制的寄存器组
__IO uint32_t ISER[8]; //中断使能寄存器组
__IO uint32_t ICER[8]; //中断失能寄存器组
__IO uint32_t ISPR[8]; //中断挂起寄存器组
__IO uint32_t ICPR[8]; //中断解挂寄存器组
__IO uint32_t IABR[8]; //中断激活标志位寄存器组
中断优先级控制的寄存器组:IP[240]
全称是:InterruptPriority Registers
240个8位寄存器,每个中断使用一个寄存器来确定优先级。
比如:STM32F10x系列一共60个可屏蔽中断,使用IP[59]~IP[0]。
每个IP寄存器的高4位用来设置抢占和响应优先级(根据分组),低4位没有用到。
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
中断使能寄存器组:ISER[8]
作用:用来使能中断
32位寄存器,每个位控制一个中断的使能。STM32F10x只有60个可屏蔽中断,所以只使用了其中的ISER[0]和ISER[1]。
ISER[0]的bit0~bit31分别对应中断0~31。ISER[1]的bit0~27对应中断32~59;
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
中断失能寄存器组:ICER[8]
作用:用来失能中断
32位寄存器,每个位控制一个中断的失能。STM32F10x只有60个可屏蔽中断,所以只使用了其中的ICER[0]和ICER[1]。
ICER[0]的bit0~bit31分别对应中断0~31。ICER[1]的bit0~27对应中断32~59;
配置方法跟ISER一样。
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
中断挂起控制寄存器组:ISPR[8]
作用:用来挂起中断
中断解挂控制寄存器组:ICPR[8]
作用:用来解挂中断
static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn);
static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn);
static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn);
中断激活标志位寄存器组:IABR[8]
作用:只读,通过它可以知道当前在执行的中断是哪一个
如果对应位为1,说明该中断正在执行。
static __INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn)
3 code
一定要使能系统时钟
因为配置GPIO和中断线的映射关系需要SYSCFG
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource11);
只要用到外部中断,就一定要打开SYSCFG时钟
上一篇:STM32中断与事件
下一篇:STM32 位段详解
史海拾趣
|
D类放大器首次提出于1958年,近些年已逐渐流行起来。那么,什么是D类放大器?它们与其它类型的放大器相比如何? 为什么D类放大器对于音频应用很有意义?设计一个“优质”D类音频放大器需要考虑哪些因素? 美国模拟器件公司(简称ADI公司)D类放大器产品 ...… 查看全部问答> |
|
本公司根据产品的需要,高薪诚聘有经验的硬件设计工程师/产品设计经理 公司名称:北京天宇威视科技有限公司 岗位职责: 1、根据新产品目标,提出新产品功能要求及硬件结构设计可行性方案; 2、综合考虑功能、成本、稳定性、工艺性等因素,提出 ...… 查看全部问答> |
|
和Linux 一样,Windows系列是完全的多任务操作系统。它们支持同样的用户接口 、网络和安全性。但是Linux和Windows的真正区别在于,Linux 事实上是Unix的一种版本,而且来自Unix的贡献非常巨大。是什么使得Unix如此重要?不仅在 于对多用户机器来说 ...… 查看全部问答> |
|
DIY数控电源外壳和面板组装完成。机内没有装主板。主板部分dontium等还在开发中。 这个并不是最终版本,组装过程中发现了一些问题,好在问题不大。这些问题会在下一版图纸中解决。 发这个贴子只是让各位关注这个DIY项目的坛友得到一些项目进展情 ...… 查看全部问答> |
|
1,FPGA IO 电平标准选择不同时,IO内部的区别是什么?比如设置成3.3V的IO和1.8的IO,FPGA内部的不同是什么?, 2,FPGA内部改变了什么,使FPGA IO 可以设置成不同的电平标准?3,我在配置管脚时,配置的电平的标准是3.3V;但实际的电路是1.8V的(i ...… 查看全部问答> |
|
齐纳二极管调整器设计 作者:Ron Mancini -- EDNIC参考很受电路设计者的欢迎,因为它们不仅精确而且飘移很小。在我今后的一些专栏文章中,将陆续讨论三种IC参考:埋入式齐纳二极管、带隙及XFET。当您用齐纳二极管进行参考设计时,由于齐纳二极管 ...… 查看全部问答> |


















