去皮卡多 发表于 2024-6-8 09:39:54

重新学习STM32(2)NVIC

概念简介        

        NVIC,即嵌套向量中断控制器,控制着中断相关的功能,是内核里面的一个外设。
        中断在单片机编程中的作用是使单片性能及时相应必要立即处理的事件,但是这些事件也分紧急和非紧急,因此必要优先级来区分。
        优先级分为主优先级和子优先级,此中主优先级又叫抢占优先级(背面主优先级全部称为抢占优先级),当同时有多个时间产生中断时,比较抢占优先级,该优先级高的先相应,抢占优先级相同的比较子优先级。优先级分组如下图。
https://img-blog.csdnimg.cn/direct/ce9ba0b617db4404b015a5793fadba5f.png
 简单应用

        在配置每个中断的时候一般必要留意如下题目:
        1. 使能外设某个中断,这个具体由每个外设的相关中断使能位控制。比如串口有发送完成中断,接收完成中断,这两个中断都由串口控制寄存器的相关中断使能位控制。
        2. 初始化 NVIC_InitTypeDef 结构体,配置中断优先级分组,设置抢占优先级和子优先级,使能中断请求。NVIC_InitTypeDef 结构体在固件库头文件 misc.h 中界说。
        在现实利用时,必要界说以下两个函数。
static void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* 嵌套向量中断控制器组选择 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
/* 配置中断源 */
NVIC_InitStructure.NVIC_IRQChannel = xxx_IRQ;
/* 抢断优先级*/
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
/* 子优先级 */
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
/* 使能中断 */
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
/* 初始化配置NVIC */
NVIC_Init(&NVIC_InitStructure);
}

void xxx_IRQHandler(void)
{
   
}          上面两个函数,第一个是NVIC的配置函数,和GPIO的利用方法类似,也是给结构体成员举行界说,末了调用初始化函数;第二个是中断触发时运行的事件。通过这两个函数,就可以在达到触发中断条件的时候举行某样操纵。
        必要留意的是,优先级分组NVIC_PriorityGroupConfig()只能在程序中配置一次,如果多次配置的话会使优先级紊乱,导致出现运行错误。
        


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 重新学习STM32(2)NVIC