嵌入式学习-STM32F103ZE中断配置
目录
一、中断概念
二、中断类型
三、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中断配置相关推荐
- cortex_m3_stm32嵌入式学习笔记(十五):待机唤醒实验(WK_UP外部中断)
cortex_m3_stm32嵌入式学习笔记(十五):待机唤醒实验(WK_UP外部中断) https://blog.csdn.net/qq_16255321/article/details/43086 ...
- 嵌入式学习笔记——ADC模数转换器
ADC模数转换器 前言 ADC介绍 ADC概述 ADC的数量 ADC的特性 ADC框图 芯片外部框图 芯片内部框图 转换部分框图 状态输出部分 条件触发框图 寄存器介绍 编程思路 模式选择 规则通道的 ...
- 嵌入式学习笔记(一)嵌入式操作系统测试
嵌入式操作系统产品在学习的过程中,了解产品特性能够有助于学习产品功能,并且能够从用户角度发掘产品需要满足的重要特征,从而提炼产品特点,并且化作产品亮点,转化为产品未来占领市场.提升竞争力的关键切入点. ...
- 嵌入式学习笔记——STM32的USART通信概述
文章目录 前言 常用通信协议分类及其特征介绍 通信协议 通信协议分类 1.同步异步通信 2.全双工/半双工/单工 3.现场总线/板级总线 4. 串行/并行通信 5. 有线通信.无线通信 STM32通信 ...
- 嵌入式学习——串口通信小试
嵌入式学习--串口通信小试 目录 嵌入式学习--串口通信小试 1.了解串口协议和RS-232.485标准,以及RS-232.485电平与TTL电平的区别 1.1 什么是串口协议 1.2 RS-232标 ...
- 基于STM32G431嵌入式学习笔记——七、定时器定时
一.题目引入 上述为第13届蓝桥杯省赛节选内容,为了研究定时器的机理并独立书写计时函数,上述内容简化为以下要求: ①按下B4按键,LD1点亮5s后熄灭 ②按下B3按键,LD2以0.1秒为间隔切换亮灭状 ...
- 蓝桥杯STM32G431RBT6学习——定时器中断
蓝桥杯STM32G431RBT6学习--定时器中断 前言 从网络上的资料来看,蓝桥杯嵌入式好像并不考外部中断(毕竟通常只是个按键应用),因此跳过进行定时器的学习. STM32单片机的定时器通常分为高级 ...
- 补充嵌入式后期的开发~~分享一下自己的嵌入式学习经验~~也纪念一下即将逝去的青春
自己的嵌入式学习经验~~也纪念一下即将逝去的青春 大一听说嵌入式很有挑战性,菜鸟也想挑战一下下,就开始了我的学习之旅,但是后来发现上了操作系统的arm完全没有自己想象的那么简单,简单的led程序都不会 ...
- 【干货分享】嵌入式学习路线公开!(书籍推荐+视频推荐+练手项目)
哈喽,大家好,我是仲一.最近有小伙伴在微信私信我,如何学习嵌入式.一直想写一篇学习路线的文章,由于各种原因拖到了现在.趁着国庆节在家,终于肝完了这篇文章. 我个人是从STM32转到驱动开发的,在研二的 ...
最新文章
- Numpy 整体复制、按块复制、向量化操作、寻找缺失值、填充缺失值
- 16个概念带你入门 Kubernetes
- Linux下ACL权限控制以及用sudo设置用户对命令的执行权限
- 转载-致IT同仁 —— IT人士常犯的17个职场错误
- js改变select下拉框默认选择的option
- html 拖放实现拼图游戏,Canvas drag 实现拖拽拼图小游戏
- php 取一条数据,php 读取txt 每次固定输出一条数据用什么方法实现?
- HTTP总有你感兴趣的
- C#学习网站资源一览
- 【TWVRP】基于matlab遗传算法求解带时间窗的车辆路径问题【含Matlab源码 002期】
- vivado-Matlab联合仿真FIR滤波器
- [经验教程]iPhone苹果手机iOS系统App Store怎么下载手机APP到苹果iPhone手机?
- VScode设置为中文版
- macOS Mojave patcher 无法制作启动盘
- 什么是U盘量产工具?量产基本知识
- dev、test、prod、pre是什么意思?
- (C/C++/Java)判断中文、字符串、数字是否为“回文”
- lisp visual 开根号_[zz] maxima 笔记
- 盘点B站up主常用的免费录屏软件,自用工具分享
- 2019,华为一号文
热门文章
- 一文看尽微软开发者大会 让AI和云驱动一切
- 【R】生成聊天记录词云
- stl list erase
- js获取css值的方法:style、getComputedStyle和currentStyle
- 基于android的温室大棚监控管理信息系统研究,基于Android与GSM的温室大棚远程监控系统.pdf...
- 【完美世界笔试】4个算法题,1.礼物盒子 2.友谊的小船 3.背包最大价值 4. 五点间最短路径
- android 布局dock,Android电源管理专题之获取和监测Dock状态和类型
- 精益画布_精益画布模型与商业画布模型
- python爬虫-Day04
- unity android 在后台运行_Agora 教程 | 在 Unity 多人游戏中实现语音对话