STM32开发必备知识篇:STM32中断类型
从今年2022年开通CSDN博客,已经快300天了,期间写了很多FPGA方面的博客,主要有两个专栏:“FPGA基础知识”和“FPGA 20个例程”。
有同学也私信问为什么迟迟不更新STM32呢,这里有几个原因得说明下:1.想集中精力去撰写完成一个专栏主要是“FPGA 20个例程”再去搞下一个,“FPGA基础知识”和“STM32开发必备知识”专栏后期会不断更新,但写“FPGA 20个例程”确实耗费了笔者太多的精力和时间,因为不想水博客写一些毫无营养价值的东西,而是想把它做好做细,这可能是一个工科男的执念吧,所以还请大家多些耐心;2.笔者每天在忙碌工作之余也在不断充电提高,为了写好下一个专栏“STM32 10个项目”。实不相瞒在写“FPGA 20个例程”中,几乎把市面的野火、原子、特权、Crazybingo、米联客、小梅哥、明德扬都看了一遍甚至代码还原了一遍,集各家所长,做到重点突出、由易到难、循循渐进,为了写好“FPGA 20个例程”专栏也动手画了一块Artix7开发板方便代码的上板调试,同样地虽然用了4年STM32做了很多转产项目,但是感觉要写好“STM32 10个项目”还需要花时间去把很多细节搞清楚,才可能写出有深度的好博客;3.实话实说笔者没有选好一个合适的硬件平台去写“STM32 10个项目”,STM32常见的F103、F405、F407、F429系列等都有用过,但是选哪一款芯片来写呢,思来想去还是选择STM32F103RCT6这款芯片作为“STM32 10个项目”的硬件平台,虽然不是最好最贵的,但是ST的这款芯片却如同Xilinx的XC7A35T-2FTG256一样经典,如图1所示是笔者刚从立创商场买的10颗STM32F103RCT6芯片,现在也在看之前做过项目的原理程图,和野火、原子、硬石、安抚莱等的教程,还是集各家所长重新画板,把这颗芯片的性能完全释放出来,虽然只有64个引脚,但是麻雀虽小五脏俱全,在硬件电路设计上做到稳定可靠,笔者首先打算把USBTMC、CAN、RS232都引出来,同时外挂一个电阻屏这样就可以把FreeRTOS和Emwin做到专栏里,然后加上1个蜂鸣器,2个外接按键和2个编码器,接着加上1个eeprom(为了掉电保存屏幕数据等)和1个flash(为了掉电保存开机logo和界面图标等),最后引出1个UART和1个SPI接到Artix7开发板的Cmos摄像头处,为了后期写STM32和FPGA联合项目专栏做好硬件准备,把板子做得精致小巧,目测需要4层至于具体引脚分配,还得花时间参考下其他的原理图和芯片手册,总共一次性投出10块STM32F103RCT6板子这样就有了产品的雏形(会留有5块板作为福利赠送给CSDN的铁粉吧);4.FPGA方面,在结束“FPGA 20个例程”专栏,还有“高速接口设计“和“数字信号处理“等专栏,STM32方面,虽然现在还没有想好,但是后期会把这块STM32F103RCT6板和XC7A35T-2FTG256板结合在一起,做一些非常接近实战项目的例程,同时充分考虑到了稳定性和可靠性,通过这些实践可以帮助大家用STM32和FPGA快速搭建出整个产品的软件架构。
图1 STM32F103RCT6实物
既然是“STM32开发必备知识“就请把基础夯实,如同写“FPGA基础知识”笔者也把常用IP核的仿真、模块划分等知识说明清楚,用了4年STM32芯片个人觉得,有几样东西是在做STM32开发前所必须要掌握的,学习任何知识都有过程,需要循循渐进把握住规律,才可能层层深入。而对于STM32开发:STM32的中断系统、时钟分配、定时器、ADC模数转换、DMA数据搬运、GPIO EXTI中断类型等这些请必须掌握,然后再把C语言的数据结构、函数指针捡起来,相信这些大家在上学的时候多多少少都有学习,这些都搞明白了再动手实践“STM32 10个项目”,这10个项目的选取也费尽心思,一方面参考了市面经典的开发板例程,另一方面更站在了4年产品研发的角度,笔者会把项目的源码开源方便大家后期学习实践。
什么叫做中断,如图2所示是一个日常生活中的中断,比如现在大家在看电视,然后这时候电话响了,我们要去接电话显然电话比看电视这件事紧急,接完电话这时候又要去取快递了,下楼取快递以后再回来继续看电视,那类似的什么是处理器中的中断呢?
在处理器中,中断是一个过程,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中止当前程序的执行,转而去为处理紧急的事件,待处理完毕后再返回被打断的程序处继续往下执行。中断在计算机多任务处理,尤其是即时系统中尤为重要,如uCOS和FreeRTOS等。
图2 日常生活中的中断
如图3所示是STM32中断处理过程,很多培训机构或者网络教程会说得很复杂繁琐,在这里其实大家只需要记住CPU进入中断前要做什么,退出中断后要做什么即可。
进入中断前
1. 处理器自动保存现场到堆栈里
2. {PC, xPSR, R0-R3, R12, LR}
3. 一旦入栈结束,ISR便可开始执行
4. 晚到的中断会重新取ISR地址,但无需再次保存现场
退出中断后
1. 中断前的现场被自动从堆栈中恢复
2. 一旦出栈完成,继续执行被中断打断的指令
3. 出栈的过程也可被打断,使得随时可以响应新的中断, 而不再进行
4. 现场保存
图3 STM32中断处理过程
如图4所示以STM32F0为例,是STM32F0中断的体系结构,在这里以Cortex-M0内部产生的中断,通常叫做“异常”,而外设产生的中断,通常就叫做“中断”,注意到对于外部产生的中断不管是串口、定时器、IIC还是EXTI GPIO都由一个叫做NVIC即“嵌套向量中断控制器”来管理,NVIC的主要功能可以概括为:1. 中断管理;2.支持异常及中断向量化处理;3.支持嵌套中断。
图4 STM32F0中断的体系结构
1. 中断管理
Cortex-M0处理器中,每一个外部中断都可以被使能或者禁止,并且可以被设置为挂起状态或者清除状态。处理器的中断可以电平的形式的,也可以是脉冲形式的,这样中断控制器就可以处理任何中断源,如图5所示是Cortex-M0处理器中的NVIC常用寄存器地址,例如ISER表示对一个中断的使能、ICER表示对一个中断的禁止、ISPR表示一个挂起寄存器的设置、ICPR表示清除挂起寄存器、IPR0-7表示对一个中断源优先级的配置。
图5 Cortex-M0处理器的NVIC常用寄存器地址
2.支持异常及中断向量化处理
如图6所示是Cortex-M0处理器的中断和异常向量表,Cortex-M0内核可以处理15个内部异常,和32个外部中断。STM32F051实际上只使用了6个内部异常和28个外部中断。当异常或中断发生时,处理器会把PC设置为一个特定地址,这一地址就称为异常向量。每一类异常源都对应一个特定的入口地址,这些地址按照优先级排列以后就组成一张异常向量表。 向量化处理中断的好处 统的处理方式需要软件去完成。采用向量表处理异常,M0处理器会从存储器的向量表中,自动定位异常的程序入口,从发生异常到异常的处理中间的时间被缩减。
图6 Cortex-M0处理器的中断和异常向量表
中断和异常的区别: 中断是微处理器外部发送的,通过中断通道送入处理器内部,一般是硬件引起的,比如串口接收中断,而异常通常是微处理器内部发生的,大多是软件引起的,比如除法出错异常,特权调用异常等待。不管是中断还是异常,微处理器通常都有相应的中断/异常服务程序,如图7所示是Cortex-M0处理器的NVIC中断编号,大家可以看到1-15即Cortex-M0内部的异常,16以上为外设的中断。
图7 Cortex-M0处理器的NVIC中断编号
3.支持嵌套中断
如图8所示是Cortex-M0处理器的优先级配置STM32F0中断的优先级,不同优先级的中断同时发生,优先处理优先级编号较小的那个同样优先级的中断同时发生,中断向量号较小的那个优先响应: 3个固定的优先级,都是负值不能改变 ;4个可编程优先级,用两个bit位表示,00,01,10,11 ;优先级越小优先级越高
图8 Cortex-M0处理器的优先级配置
STM32开发必备知识篇:STM32中断类型相关推荐
- STM32开发必备知识篇:STM32的运行机制
时间飞逝,转眼间已经硕士毕业工作第四年了,嵌入式研发成长道路上曲折坎坷,所以这也是我今年撰写博客的初心,即分享技术积累和研发经验,目前主要分为STM32和FPGA两个专辑,都包括开发必备知识篇和实战项 ...
- 移动端H5网页开发必备知识
简介 工欲善其事必先利其器,今天这篇文章主要讲解移动端H5开发必备的一些基础知识以及移动端适配和布局方案.如果已经看过这篇文章了或者已经掌握了移动端基础的话可以看笔者写的 移动端H5网页开发常见问题汇 ...
- 移动端开发必备知识-Hybrid App
简介 面试的时候小伙伴们有没有被问到过Hybrid App呢?不得不说了解Hybrid App是我们前端面试中的一个加分项.今天就跟随笔者的步伐让你彻底弄懂Hybrid App,让你就算没做过也能对面 ...
- SP 短信开发-基础知识篇
SP 短信开发-基础知识篇 很土的话题,但是最近帮朋友做这个东西,所以写点东西出来给初学者参考. 一.准备资料 SP开发资料网站上有很多,但是主要是以下几个文档: 1.MISC1.6 SP订购通知接口 ...
- WCF分布式开发必备知识(4):Web Service(转)
今天继续我们的WCF分布式开发必备知识系列文章的第4节:Web Service.前3节我们分别介绍了MSMQ消息队列/.Net Remoting/Enterprise Services三个相关的技术. ...
- 移动web开发(一)——移动web开发必备知识
参考: 移动终端开发必备知识.http://isux.tencent.com/mobile-development-essential-knowledge.html
- 移动端webapp开发必备知识
转载自:移动终端开发必备知识 转载自:移动端webapp开发必备知识 请尊重版权,转载请注明来源,多谢~~ 移动设备的用户越来越多,每天android手机的激活量都已经超过130万台,所以我们面向移动 ...
- 移动终端开发必备知识(转载)
移动设备的用户越来越多,每天android手机的激活量都已经超过130万台,所以我们面向移动终端的WebAPP也开始跟进了.本文主要介绍webapp的开发与调试的相关知识和经验,以及给出几种可选的解决 ...
- Stm32开发1-蓝牙实现STM32的无线烧写程序 ISP模式 串口1不受影响 无线下载
最近研究如何实现Stm32的无线烧写程序.从CSDN上看到大部分的无线烧写方法,大都是采用ESP8266+CMSIS-DAP的方式,其能下载也能调试程序,也能通过虚拟串口通信.但是其串口应该是用软件实 ...
最新文章
- Enterprise Architect 中文经典教程
- SpringMVC中IOC容器启动
- odata连接现有数据库
- 基于运维网V8环境安装ntop
- Linux快捷键笔记
- MTK平台各种分区和bin/img(线刷包)对应关系和作用说明
- sketch软件_产品经理基础知识构成之图像处理工具sketch(1)
- android 混淆成功,Android 混淆APK并检查是否混淆成功
- html id命名规范,常见的类名id名命名参考规范
- python怎么打开h5文件_python中利用h5py模块读取h5文件中的主键方法
- asd激光粒度仪测试原理是什么解答
- win 10卸载mysql_Windows 10系统下彻底删除卸载MySQL的方法教程
- Excel表中查找、去除重复项方法合集
- 无人机配送相关内容概要
- 半年萌新对BUG分析和理解
- 利用这5个办法成为自由职业者,通过远程赚钱,开心旅行、轻松赚钱!
- iOS开发使用nib进行界面设计并跳转
- 领扣(LeetCode)整数反转
- 华为e NSP每日学习
- 详解叠瓦式磁记录SMR盘基础知识
热门文章
- 路由控制解决双点双向问题
- JVM类加载机制、双亲委派机制、自定义类加载器、打破双亲委派机制
- Expression Blend制作画卷效果
- Office之PPT
- python string indices must be_python报错string indices must be integers,怎么解决?
- 机器学习——线性回归
- 【ThreeJS基础教程-高级几何体篇】2.6.1 BufferGeometry应用1-物体居中与包围盒的应用
- Android Accessibility自动安装app
- 如果我去深圳,你会见我吗
- 【鼓捣树莓派】动态网页控制lcd显示