| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> STM32开发必备知识篇:STM32中断类型 -> 正文阅读 |
|
[嵌入式]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处理器的优先级配置 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 2:42:55- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |