目录

一、中断概念

二、中断类型

三、NVIC

四、中断优先级

五 中断编程顺序

1.使能中断请求

2.中断优先级配置

3.初始化NVIC_InitTypeDef结构体

4.中断服务函数

六、总结


一、中断概念

中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

二、中断类型

本文主要关于stm32f103ze系列中的关于中断的一些介绍和编程顺序。

1.系统中断

内核中的中断,其中复位的优先级最高

2外部中断

外设中的中断

在此只分大类,详细想要知道可以参考中文手册里面的中断向量表,在启动文件STARTUP中也可找到中断向量表。因为启动文件会初始化中断向量表。

三、NVIC

NVIC(嵌套向量中断控制器),属于内核外设,作用是管理内核和片上外设所有的中断相关的功能。关于更多的NVIC的信息,可以参考内核编程手册(如果你买了板子的话,或者可以找资料),或者在core_cm3.h中可以找到定义的结构体。如下图,其中最常用到是中断优先级寄存器。

一般内核中有个十个中断寄存器,外设有60个。但ARM公司给了240个。还有就有个值得注意的是ARM公司给了8位的寄存器,但ST公司只用了高四位。

在学习过程中,遇到关于内核相关的函数,通常要到core_cm3.h和misc.h中找。关于NVIC所有的固件库函数都在misc.h中

四、中断优先级

优先级的设定:NVIC->IPRx 即通过操作IPR这个寄存器

优先级分组:SCB->AIRCR:PRIGROUP

对于优先级,优先级数值越小,优先级别越高

原则1:组别优先级,Group0最大,然后以此类推。

原则2:组别优先级>抢占优先级>响应优先级。

原则3:当A和B中断都是Gruop0,且抢占优先级和响应优先级都一样,即软件优先级一样,那么就需要去中断向量表中比较他们硬件的中断编号,同样数值越小,优先级越高。

五 中断编程顺序

1.使能中断请求

就是指外设中的中断,那就要配置外设寄存器。

2.中断优先级配置

SCB->AIRCR:PRIGROUP 就是配置这个寄存器

但要通过固件库编程,就要去配置上述提到过的misc.h中的 NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)函数 。本质上是一致的,都是操作寄存器。

3.初始化NVIC_InitTypeDef结构体

同样在misc.h中可以找到这个结构体,如上图。

关于里面的参数,第一个中断源可以在stm32f10x.h中找到,寻找过程中要注意你所选用的是flash大小,是LD、MD还是HD。第二个是抢占优先级,这个是根据前面的优先级分组来配置的。第三个是响应优先级的配置。最后一个是使能,即大门。(前面说了使能中断请求时小门,即外设发送请求,这个使能时NVIS中的,也就是内核中的)。

上述配置完成后,需要调用misc.h中的NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)函数去完成初始化。

4.中断服务函数

启动文件中,将中断向量表中的函数名都是初始化好了,c语言中,函数的名称即函数的地址,也就是启动文件已经规定了这些中断服务函数的地址。也对这些函数名进行了弱定义,你可以在其他文件定义,并优先在定义的文件中使用,但要是名称编写错误,则进行启动文件中的中断服务函数。

中断服务函数需要写在stm32f10x_it.c文件中。

六、总结

比较重要的就是NVIC(嵌套向量中断控制器),属于内核外设,关于内核相关的可在core_cm3.h和misc.h中找。其次就是中断优先级,当软件优先级相同时,需要去查中断向量表,比较硬件编号的大小。最后就是中断编程顺序。首先要使能中断请求;随后配置中断优先级,先分组,再配置中断源(在stm32f10x.h中),然后配置抢占优先级和副优先级;最后NVIC使能、初始化。还有一点值得注意的就是编写中断服务函数时,启动文件中可以找到中断服务函数名,不要写错。

嵌入式学习-STM32F103ZE中断配置相关推荐

  1. cortex_m3_stm32嵌入式学习笔记(十五):待机唤醒实验(WK_UP外部中断)

    cortex_m3_stm32嵌入式学习笔记(十五):待机唤醒实验(WK_UP外部中断) https://blog.csdn.net/qq_16255321/article/details/43086 ...

  2. 嵌入式学习笔记——ADC模数转换器

    ADC模数转换器 前言 ADC介绍 ADC概述 ADC的数量 ADC的特性 ADC框图 芯片外部框图 芯片内部框图 转换部分框图 状态输出部分 条件触发框图 寄存器介绍 编程思路 模式选择 规则通道的 ...

  3. 嵌入式学习笔记(一)嵌入式操作系统测试

    嵌入式操作系统产品在学习的过程中,了解产品特性能够有助于学习产品功能,并且能够从用户角度发掘产品需要满足的重要特征,从而提炼产品特点,并且化作产品亮点,转化为产品未来占领市场.提升竞争力的关键切入点. ...

  4. 嵌入式学习笔记——STM32的USART通信概述

    文章目录 前言 常用通信协议分类及其特征介绍 通信协议 通信协议分类 1.同步异步通信 2.全双工/半双工/单工 3.现场总线/板级总线 4. 串行/并行通信 5. 有线通信.无线通信 STM32通信 ...

  5. 嵌入式学习——串口通信小试

    嵌入式学习--串口通信小试 目录 嵌入式学习--串口通信小试 1.了解串口协议和RS-232.485标准,以及RS-232.485电平与TTL电平的区别 1.1 什么是串口协议 1.2 RS-232标 ...

  6. 基于STM32G431嵌入式学习笔记——七、定时器定时

    一.题目引入 上述为第13届蓝桥杯省赛节选内容,为了研究定时器的机理并独立书写计时函数,上述内容简化为以下要求: ①按下B4按键,LD1点亮5s后熄灭 ②按下B3按键,LD2以0.1秒为间隔切换亮灭状 ...

  7. 蓝桥杯STM32G431RBT6学习——定时器中断

    蓝桥杯STM32G431RBT6学习--定时器中断 前言 从网络上的资料来看,蓝桥杯嵌入式好像并不考外部中断(毕竟通常只是个按键应用),因此跳过进行定时器的学习. STM32单片机的定时器通常分为高级 ...

  8. 补充嵌入式后期的开发~~分享一下自己的嵌入式学习经验~~也纪念一下即将逝去的青春

    自己的嵌入式学习经验~~也纪念一下即将逝去的青春 大一听说嵌入式很有挑战性,菜鸟也想挑战一下下,就开始了我的学习之旅,但是后来发现上了操作系统的arm完全没有自己想象的那么简单,简单的led程序都不会 ...

  9. 【干货分享】嵌入式学习路线公开!(书籍推荐+视频推荐+练手项目)

    哈喽,大家好,我是仲一.最近有小伙伴在微信私信我,如何学习嵌入式.一直想写一篇学习路线的文章,由于各种原因拖到了现在.趁着国庆节在家,终于肝完了这篇文章. 我个人是从STM32转到驱动开发的,在研二的 ...

最新文章

  1. Numpy 整体复制、按块复制、向量化操作、寻找缺失值、填充缺失值
  2. 16个概念带你入门 Kubernetes
  3. Linux下ACL权限控制以及用sudo设置用户对命令的执行权限
  4. 转载-致IT同仁 —— IT人士常犯的17个职场错误
  5. js改变select下拉框默认选择的option
  6. html 拖放实现拼图游戏,Canvas drag 实现拖拽拼图小游戏
  7. php 取一条数据,php 读取txt 每次固定输出一条数据用什么方法实现?
  8. HTTP总有你感兴趣的
  9. C#学习网站资源一览
  10. 【TWVRP】基于matlab遗传算法求解带时间窗的车辆路径问题【含Matlab源码 002期】
  11. vivado-Matlab联合仿真FIR滤波器
  12. [经验教程]iPhone苹果手机iOS系统App Store怎么下载手机APP到苹果iPhone手机?
  13. VScode设置为中文版
  14. macOS Mojave patcher 无法制作启动盘
  15. 什么是U盘量产工具?量产基本知识
  16. dev、test、prod、pre是什么意思?
  17. (C/C++/Java)判断中文、字符串、数字是否为“回文”
  18. lisp visual 开根号_[zz] maxima 笔记
  19. 盘点B站up主常用的免费录屏软件,自用工具分享
  20. 2019,华为一号文

热门文章

  1. 一文看尽微软开发者大会 让AI和云驱动一切
  2. 【R】生成聊天记录词云
  3. stl list erase
  4. js获取css值的方法:style、getComputedStyle和currentStyle
  5. 基于android的温室大棚监控管理信息系统研究,基于Android与GSM的温室大棚远程监控系统.pdf...
  6. 【完美世界笔试】4个算法题,1.礼物盒子 2.友谊的小船 3.背包最大价值 4. 五点间最短路径
  7. android 布局dock,Android电源管理专题之获取和监测Dock状态和类型
  8. 精益画布_精益画布模型与商业画布模型
  9. python爬虫-Day04
  10. unity android 在后台运行_Agora 教程 | 在 Unity 多人游戏中实现语音对话