一、简介
CM3内核支持256个中断,16个内核中断,240个外部中断,并且拥有256级的可编程中断设置。
但是STM32只用到了CM3内核的一部分,STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程中断优先级。
STM32F103系列只有60个可屏蔽中断。
二、中断管理
1.对STM32进行中断分组,组0-4,同时对每个中断设置一个抢占优先级和一个响应优先级。组分配好后抢占位和响应位就已经确定。
组 | bit[7-4](共4位) | 分配结果 |
0 | 0:4 | 0位抢占优先级,4位响应优先级 |
1 | 1:3 | 1位抢占优先级,3位响应优先级 |
2 | 2:2 | 2位抢占优先级,2位响应优先级 |
3 | 3:1 | 3位抢占优先级,1位响应优先级 |
4 | 4:0 | 4位抢占优先级,0位响应优先级 |
2.抢占优先级和响应优先级的区别
(1)高优先级的抢占优先级可以打断低抢占优先级的中断。
(2)抢占优先级相同的中断,高响应优先级不能打断低响应优先级。
(3)抢占优先级相同的中断,当中断同时发生时,响应级高的先执行。
(4)抢占和响应优先级都一样则哪个中断先发生,则执行哪个。
注意:一般优先级分组只设置一次,否则会出现中断管理混乱。
3.优先级配置
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//只设置一次
//在引脚配置中设置
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //串口1
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //响应优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能通道
NVIC_Init(&NVIC_InitStructure); //初始化
4.中断优先级的挂起解挂,查看当前激活状态
NVIC_GetPendingIRQ(IRQn_Type IRQn)
NVIC_SetPendingIRQ(IRQn_Type IRQn)
NVIC_ClearPendingIRQ(IRQn_Type IRQn)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)