STM32 中断与嵌套NVIC 快速入门

发布者:liliukan最新更新时间:2015-08-12 来源: eefocus关键字:STM32  中断与嵌套N  VIC 手机看文章 扫描二维码
随时随地手机看文章
STM32 中断与嵌套NVIC 快速入门。
我也是靠看这本书才弄懂的:
Cortex-M3 权威指南
Joseph Yiu 著
宋岩 译
其实很简单。
//CM3 有 最多240个中断(通常外部中断写作IRQs),就是 软件上说的 IRQ CHANAELx(中断通道号x)
每个中断有自己的可编程的中断优先级【 有唯一对应的 中断优先级寄存器 】.
由于CM3支持 硬件中断嵌套,所以可以有 256 级的可编程优先级
和 256级中断嵌套【 书上称:抢占(preempt) 优先级】
所以大家可以设:
IRQ CHANAEL 0 通道 = 2    中断优先级    WWDG 窗口定时器中断
IRQ CHANAEL 1 通道 = 0    中断优先级    PVD 联到EXTI的电源电压检测(PVD)中断
IRQ CHANAEL 3 通道 = 255  中断优先级    RTC 实时时钟(RTC)全局中断
IRQ CHANAEL 6 通道 = 10   中断优先级    EXTI0 EXTI线0中断
.....
IRQ CHANAEL 239 通道 =  (0  中断优先级    ..

这个实在是太恐怖了! 是的,其实CM3 并没有这样做。
实在的芯片例如STM32等就只有设计来可用才64级可编程优先级和8级中断嵌套。
对 64级中断就是说:( INT0 到 INT63)这个大家比较好理解,其它的64···239就不用了。
IRQ CHANAEL 0
。。。
IRQ CHANAEL  63
而8级中断嵌套这又是何解呢?
是这样的,上面说 一个 【中断】对应 一个【中断优先级寄存器】,而这个寄存器是 8 位的。
当然就是 256级了。而现在就用了 它其中的 BIT7,IT6,BIT5 三位来表示,而且是MSB对齐的。
用了3 个位来表达优先级(MSB 对齐的我们能够使用的8 个优先级为:0x00(最高),0x20,0x40,0x60,0x80,0xA0,0xC0 以及0xE0。)
这样我们在【中断优先级寄存器】就不能按理论的填 0到255之间的数了,
而只能填0x00(最高),0x20,0x40,0x60,0x80,0xA0,0xC0 以及0xE0。)
所以大家可以设:
IRQ CHANAEL 0 通道 = 0x20  中断优先级    WWDG 窗口定时器中断
IRQ CHANAEL 1 通道 = 0x40  中断优先级    PVD 联到EXTI的电源电压检测(PVD)中断
IRQ CHANAEL 3 通道 = 0x20  中断优先级    RTC 实时时钟(RTC)全局中断
IRQ CHANAEL 6 通道 = 0xA0  中断优先级    EXTI0 EXTI线0中断
.....
IRQ CHANAEL 63 通道 =  【0x00(最高),0x20,0x40,0x60,0x80,0xA0,0xC0 以及0xE0。)】
大家注意到了,上面通道0和通道3 的优先级都是0X20, 这怎么办?
// 如果优先级完全相同的多个异常同时悬起,则先响应异常编号最小的那一个。如IRQ #0会比IRQ #3 先得到响应
而且文中还讲了 【优先级分组】,这又是什么回事?
其实我回头看来,这个【优先级分组】和【抢占优先级】【亚优先级】都毫无意义的。
如果当时用 256级即是 把【中断优先级寄存器】的8位都全用上,就没这个必要了。还什么优先级分组呢!
就是因为厂家现在【偷工减料】,才搞出这个明堂来的。
是这样的,在 应用程序中断及复位控制寄存器(AIRCR) 中的 10:8 位【3位】是表示【优先级分组】
它作用主要是 用于对【中断优先级寄存器】『我们现在中用了BIT7,BIT6,BIT5三位』的功能的说明。
有一个表,在《Cortex-M3 权威指南》的110页, 例如我们把AIRCR的10:8 位设为【5】 ,
查表可得【抢占优先级】=【7:6】,【亚优先级】=【5:0】,
对于【中断优先级寄存器】只用了BIT7,6,5, 因此我们可以看作是 【7:6】,【5】。那4-0 可以不管。
现在我们的 IRQ0=0X20, IRQ3=0X20, 也就是  【0 0 1 0  】『 bit7=0,bit6=0,bit5=1,bit4=0』
因为大家(IRQ0/IRQ3)的 【抢占优先级】=【7:6】都是0, 说明它们的中断相应级别是一样的。
再继续判断它们哪个更优先的责任就要看【5】,结果连【5】都是一样的!
那就按默认:
// 如果优先级完全相同的多个异常同时悬起,则先响应异常编号最小的那一个。如IRQ #0会比IRQ #3 先得到响应
关键字:STM32  中断与嵌套N  VIC 引用地址:STM32 中断与嵌套NVIC 快速入门

上一篇:STM32 定时器 定时时间的计算
下一篇:STM32中断优先级分组

推荐阅读最新更新时间:2024-03-16 14:28

STM32 SysTick延时的使用说明
/*初始化时钟*/ void Init_SysTick(void) { if(SysTick_Config(SystemCoreClock / 1000)) //注意:3.5库中 SystemFrequency 被 SystemCoreClock 取代。 while(1); } /*延时1ms函数*/ __IO uint32_t TimingDelay; void delay_ms(__IO uint32_t nTime) { TimingDelay = nTime; while(TimingDelay != 0); } /*stm32f10x_it.c中的void SysTick_Handler(v
[单片机]
STM32 基础系列教程 21 - NVIC
前言 学习stm32 NVIC接口编程,学会使用常用的NVIC接口函数,优改中关优先级,开/关单个中断,开/关所有中断,开/关所有中断和异常,系统软件重启等功能。 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。 本示例所用的最小系统板原理图: 从本节开始,关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置: 系统时钟树 NVIC器配置 开启exit-0外部中断和串口1中断, 串口1的配置
[单片机]
<font color='red'>STM32</font> 基础系列教程 21 - NVIC
STM32学习笔记之开发环境
本文主要由两部分组成,一是STM32开发环境MDK-ARM的介绍及安装,一是STM32官方库文件的下载与配置。 一、开发环境安装 (一)开发环境简介 KEIL公司目前有四款独立的嵌入式软件开发工具,即MDK、KEIL C51、KEIL C166、KEIL C251,它们都是KEIL公司品牌下的产品,都基于uVision集成开发环境,其中MDK是RealView系列中的一员。而MDK-ARM、KEIL MDK、RealView MDK、KEIL For ARM,都是同一个东西,ARM公司现在统一使用MDK-ARM的称呼。 KEIL MDK开发工具源自德国 Keil 公司,被全球超过 10 万的嵌入式开发工程师验证和使用,是ARM公
[单片机]
<font color='red'>STM32</font>学习笔记之开发环境
stm32发送中断编程思路
查询方式:发送数据——先发后查; 接收数据——先查后收。 中断方式:发送数据——发送、等待中断、中断中发送; 接收数据——等待中断、在中断中接收。 发送一个字符串 查询发送:发送完一个字节,等待发送完,继续发送下个字节,直到整个字符串发送完 在这期间一直占用CPU 中断发送:发送完一个字节CPU响应中断将下个字节放到外设寄存器,直到整个字符串发完 只有在中断时占用CPU资源 串口发送中断我只用过一次: 只要将第一个字节送进串口发送数据寄存器,就可以在串口发送中断里依次把剩余的字节都发送完,省去了等待每一个字节发送完的时间。 不过这是在AVR中用的。STM32的
[单片机]
STM32学习日志——窗口看门狗实验
程序的调试有时候很令人头痛,但找出原因并解决的一刻是真的爽。 下午继续STM32的学习,接下来是窗口看门狗实验,之所以叫做窗口,是因为它的喂狗时间有一个上下限范围,可以通过寄存器去配置。而它的下限是固定的,为0x3F(0x001111111),上限通过寄存器WWDG_CFR配置,如果在上限之前喂狗则会复位,到达下限后系统也会自动复位。 从看门狗框图中可以看出,复位的与门输出要为1,则两个输入必须都为1,说明WDGA启动位必须置1,或门的输出也要为1这两个条件必须满足。而要想或门的输出为1,有两个条件之一满足即可,1)T6为0,即0x40减至0x3F的一瞬间触发复位。2)比较器的输出为1,即T6:0 W6:0,也就是计数器的当
[单片机]
基于STM32完成FATFS文件系统移植运用
一、环境介绍 主控MCU: STM32F103ZET6 STM32程序开发IDE: keil5 STM32程序风格: 采用寄存器方式开发,注释齐全,执行效率高,方便移植 硬件包含: 一块STM32F103ZET6系统板、一个SPI接口的SD卡卡槽模块、一张SD卡 工程完整源码下载地址: https://download.csdn.net/download/xiaolong1126626497/19687693 这篇文章主要演示FATFS文件系统如何移植到自己的工程,并完成文件的读写。 因为SD卡采用的是SPI模拟时序,所以,其他单片机一样可以照着移植,代码都可以复制粘贴的。 二、FATFS文件系统介绍
[单片机]
基于<font color='red'>STM32</font>完成FATFS文件系统移植<font color='red'>与</font>运用
STM32的位带操作重谈嵌入式中寻址对齐的理解
觉得这篇文章很不错,普及知识: 初接触STM32的人一定花了不少时间用于理解其位带操作(bit banding)的原理与步骤。位带操作允许编程人员以字的单位读/写单一bit位。回想我们平时对于一个bit位的操作比如: @- PIN0 |= (1 3); @- PIN0 &= ~(1 5); 虽然这只是一行代码,但是实际上这一行做了好几步的工作。比如第一行,首先读出当前PIN0的值放到缓存区,将1左移三位放入缓存区,将二者进行 或 操作,即将当前PIN0的第三位置位1,将结果存入到实际PIN0所在的地址,即更新了PIN0的值。当然实际写成汇编后可能步骤不见得一定一样,但是这几步工作是一定得做的。 而对于位带操作,S
[单片机]
从<font color='red'>STM32</font>的位带操作重谈嵌入式中寻址<font color='red'>与</font>对齐的理解
ST 最新STM32 Primer开发工具可玩Maze和Breakout
完整、独立、预编程的评估工具套件,既有充满趣味性的功能介绍,又有严肃的开发工具,可以链接到在线开发社区 中国,2007年10月15日 — 意法半导体(纽约证券交易所代码:STM)今天推出了一套价格低廉的开发工具,这款代号为STM32 Primer开发工具是一套完整的学习与娱乐相结合的趣味性应用开发工具,用于ST的STM32系列基于具有突破性的ARM Cortex-M3内核的闪存微控制器。这套工具包含一个创新的用户界面、多个游戏和向新用户介绍该系列产品的产品入门功能,以及用于高级开发和编程的Raisonance软件工具。 STM32 Primer是一个手持评估开发工具,力图通过简单和有趣的介绍,让用户了解STM32的强大功能。紧
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved