STM32 对于NVIC中断优先级的设置
来源:互联网 发布:php 小论坛开源 编辑:程序博客网 时间:2024/06/03 02:32
转载自:http://blog.chinaunix.net/space.php?uid=20745340&do=blog&cuid=2354876
对STM32 NIVC的了解 (2010-10-14 17:37)
对STM32 NIVC的了解 (2010-10-14 17:37)
用STM32做项目已经有段时间了,但是我忽然发现我对NVIC其实一点都不了解,所以今天补习了一下NVIC的知识以及我自己对NVIC中断优先级设置的了解,希望对大家有所帮助:
对于NVIC中断优先级的设置一直都不是很清楚;
具体函数如下:
/* Configure one bit for preemption priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // 优先级组设置
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // 优先级组设置
/* Timer2中断*/
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; // 通道设置
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 抢占优先级设置
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 响应优先级设置
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
上面就是简单的一个中断使能及优先级设置过程。
其中NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); 是优先级组设置
对于STM32只支持4位即5种模式的优先级组设置,而在CM3的权威指南里说了他支持8位即256个分级
这说明STM32删减了CM3的优先级别;
STM32中描述的分别为:
NVIC_PriorityGroup_0 (0 位的抢占优先级,4 位响应优先级)
NVIC_PriorityGroup_1 (1 位的抢占优先级,3 位响应优先级)
NVIC_PriorityGroup_2 (2 位的抢占优先级,2 位响应优先级)
NVIC_PriorityGroup_3 (3 位的抢占优先级,1 位响应优先级)
NVIC_PriorityGroup_4 (4 位的抢占优先级,0 位响应优先级)
(上面关于 PriorityGroup 的说法与 CM3 权威指南上的 Group 不同,STM 把这个 group 重新做了定义。)
这里需要介绍下:
0位抢占优先级说明,没有抢占优先级只有响应优先级,并且也支持此2的4次方16个优先级别
在这16个优先级别里没有抢占试优先级都是,响应优先级,也就是说优先级没有嵌套能力,中断来了只能按照
响应优先级的顺序排列执行;
0位响应优先级说明16个优先级都是抢占优先级,无论当前是哪个中断只要来了比他优先级高的中断进来都可以实现中断嵌套,嵌套层数为16;
举例说明:
对于系统中的两个中断设置如下:
/* Configure one bit for preemption priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/* Timer2中断*/
/*
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
*/
/* UART5中断*/
NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
因为想要TIM2的优先级高于UART5的优先级不能设置NVIC_PriorityGroup_0
只能设置1,2,3,4组,该例子中设置组1则 他有两个抢占优先级别,所以在两个中断中一个抢占优先级写0,一个写1,写0的优先级高于写1的 ,然后对于响应优先级有2的3次方8个响应优先级,这样既可达到要求
- STM32 对于NVIC中断优先级的设置
- STM32 NVIC 中断优先级管理
- STM32 NVIC 中断优先级管理
- stm32之中断优先级NVIC
- STM32 NVIC中断优先级管理
- STM32 NVIC 中断优先级管理
- STM32 NVIC 中断优先级管理
- STM32 NVIC的优先级概念
- STM32 的优先级NVIC配置
- stm32(二) stm32中断优先级的设置
- stm32(二) stm32中断优先级的设置
- stm32(二) stm32中断优先级的设置
- STM32F4设置NVIC中断优先级分组
- STM32系列第6篇--NVIC中断优先级分组
- stm32学习笔记 F1系列中断优先级管理NVIC
- STM32的NVIC和中断的总结
- NVIC中断优先级管理
- NVIC中断优先级管理
- c# 注册属性
- 第一财经周刊:硅谷就是这样
- 火星双色球预测程序终于面世!就此全面终结双色球彩票的生路,哈哈!
- 如何使用下标遍历二维数组
- CCmdUI
- STM32 对于NVIC中断优先级的设置
- Android如何通过content provider构建媒体文件数据库
- P2P穿透UDP/TCP--原理篇
- ubuntu解压命令全览
- JavaSE绑定oracle数据库应用的增、删、改、查实例
- WINDOWS下利用QOS实现流量控制
- 由FlipperView想到的 关于TouchEvent事件
- 企业网站常用中英文对照
- P2P穿透UDP/TCP--原理与实践篇(2篇) .