STM32 中断优先级设置或配置

您所在的位置:网站首页 简述使用外部io口引脚中断的基本步骤 STM32 中断优先级设置或配置

STM32 中断优先级设置或配置

2024-07-17 15:54| 来源: 网络整理| 查看: 265

STM32F103XXX 中断优先级设置或配置

STM32 中断系统系统是非常复杂的。如果是搞不清楚计算机底层硬件或计算机工作原理的人,是很难搞懂中断系统。作为普通程序员只要会使用也未尝不可呀!我认为会使用就很好了,因为越是底层东西厂商也不需要用户去深入去理解,会用行就行。

STM32F103XXX系列的中断有如下几个问题你搞明白了,就很容易使用它了。

中断分组NVIC_PriorityGroup:既然要分组,你就会问STM32F103XXX系列能分几组?能分五组。它的组号是从零开始的。不同的组号还有老大、老二、老三、老四、老五区分。组0号是老大,组4号是老五。中间就是老二 老三 老四。注意没有组 5号的存在。在STM32库函数里它们都有自己的英文名字。

老大的英文名称:NVIC_PriorityGroup_0 老二的英文名称:NVIC_PriorityGroup_1 老三的英文名称:NVIC_PriorityGroup_2 老四的英文名称:NVIC_PriorityGroup_3 老五的英文名称:NVIC_PriorityGroup_4

*STM32F103XXX中有两个优先级的概念:抢占优先级和响应优先级,也有把响应优先级称作“亚优先级”或“副优先级,每个中断源都需要被指定这两种优先级,在STM32库函数里它们都有自己的名字*

抢占优先级英文名称:Preemptionpriority。 响应优先级英文名称:SubPriority。 一旦分组确定,这个组可以提供的抢占优先级的个数和响应优先级大的个数 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。 NVIC_PriorityGroup_0大于NVIC_PriorityGroup_1大于NVIC_PriorityGroup_2大于NVIC_PriorityGroup_3大于NVIC_PriorityGroup_4大于NVIC_PriorityGroup_4 在不同的组里分配(NVIC_PriorityGroup)可以分配到抢占优先级和响应优先级英是不同的。请看下表

组 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位响应优先级

/* 配置GPIO中断 */ void STM32EXTI_Configuration(void) { EXTI_InitTypeDef EXTI_InitStructure; EXTI_ClearITPendingBit(EXTI_Line5);// 清除EXTI线路挂起位 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);// 选择GPIO管脚用作外部中断线路 EXTI_InitStructure.EXTI_Line = EXTI_Line5; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure);// 初始化外设EXTI寄存器 }

/* STM32配置抢占优先级和响应优先级 */ void STM32NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //中断分组 NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //设置通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //设置抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //响应优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3