你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32开发必备知识篇:STM32中断类型

[复制链接]
STMCU小助手 发布时间:2022-10-31 23:35

8 h1 q7 [1 m5 Y; J+ I b8bab34965b543c4b4d89aef2947eea9.jpg
8 z5 V; J* Z1 K! h- x
( R* n2 ^$ P, K图1 STM32F103RCT6实物" m, A- Z3 Z  L

" f# H! j" D" I3 T7 _9 k5 p5 }& V       既然是“STM32开发必备知识“就请把基础夯实,如同写“FPGA基础知识”笔者也把常用IP核的仿真、模块划分等知识说明清楚,用了4年STM32芯片个人觉得,有几样东西是在做STM32开发前所必须要掌握的,学习任何知识都有过程,需要循循渐进把握住规律,才可能层层深入。而对于STM32开发:STM32的中断系统、时钟分配、定时器、ADC模数转换、DMA数据搬运、GPIO EXTI中断类型等这些请必须掌握,然后再把C语言的数据结构、函数指针捡起来,相信这些大家在上学的时候多多少少都有学习,这些都搞明白了再动手实践“STM32 10个项目”,这10个项目的选取也费尽心思,一方面参考了市面经典的开发板例程,另一方面更站在了4年产品研发的角度,笔者会把项目的源码开源方便大家后期学习实践。4 V; g$ v: c+ u( S7 h+ A
1 \$ j, M  w5 q9 S7 h, V
        什么叫做中断,如图2所示是一个日常生活中的中断,比如现在大家在看电视,然后这时候电话响了,我们要去接电话显然电话比看电视这件事紧急,接完电话这时候又要去取快递了,下楼取快递以后再回来继续看电视,那类似的什么是处理器中的中断呢?. V' J2 @( j2 Z+ [1 H: R3 ^; z( u9 G
* K; Y. a( u1 b
      在处理器中,中断是一个过程,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中止当前程序的执行,转而去为处理紧急的事件,待处理完毕后再返回被打断的程序处继续往下执行。中断在计算机多任务处理,尤其是即时系统中尤为重要,如uCOS和FreeRTOS等。2 d$ ~2 V  U3 v6 L% @. y; z
) R0 [. J; p+ D
6ab80cb5080b44e4a8b6f5dcb6bfef7f.png
! o5 T/ }1 n) S
; s- L  E+ [; i( b; M 图2 日常生活中的中断1 Z4 V4 B% D9 \, Y) s+ R

9 Y' W. b& k6 X+ G1 J/ i" X3 L        如图3所示是STM32中断处理过程,很多培训机构或者网络教程会说得很复杂繁琐,在这里其实大家只需要记住CPU进入中断前要做什么,退出中断后要做什么即可。
' \( g. O+ u; [3 _6 j1 x0 R4 B" m
! G% r; c4 }. }, O0 n0 u% l& x进入中断前  j: p4 f9 \- t3 \! Y8 M" l

6 D( q; V& C$ ^' g1. 处理器自动保存现场到堆栈里: F# j/ b# w) a( B3 k0 m7 `

- h  i! h7 O0 j, \: y( Z+ X7 Z- Q. [2. {PC, xPSR, R0-R3, R12, LR}* M) r# E8 `. I9 P

+ F, n  F7 q# i( w* a. M2 E8 C3. 一旦入栈结束,ISR便可开始执行3 t% d# M1 z3 q* J- w7 h" L

+ |* d; j5 l* D! H/ r; L# Z2 }4. 晚到的中断会重新取ISR地址,但无需再次保存现场
# _6 s+ q4 o0 G' `9 h4 Q, k' H( r  A: o4 Y8 M* d. U' T% K
退出中断后8 s. I3 ?5 q3 D; W; G& c/ ^
% e, P( I( S$ _% X
1. 中断前的现场被自动从堆栈中恢复  K8 q& l. t0 [" I; l8 |6 c

2 U+ K+ @, G7 D- J+ @' J2. 一旦出栈完成,继续执行被中断打断的指令; _# i& E) Y  {; A' R1 c
0 d/ ?5 ^% m) m7 Q9 K6 d
3. 出栈的过程也可被打断,使得随时可以响应新的中断, 而不再进行
( w' I/ Y- R' q1 c: d& r, q+ A# j# K+ _! @  j8 S% `3 b
4. 现场保存( h, b0 |) c1 e( u6 U& R2 }

4 s/ Y& M3 a# c0 B: [ 2c3d4f598082429bb92bbdba816f65ef.png 9 d( w& `, j- h3 ^4 w1 {
; J, k( q- k3 s
图3 STM32中断处理过程
* k) C4 i& r. S/ x. P$ w7 {. T* \$ `# s
         如图4所示以STM32F0为例,是STM32F0中断的体系结构,在这里以Cortex-M0内部产生的中断,通常叫做“异常”,而外设产生的中断,通常就叫做“中断”,注意到对于外部产生的中断不管是串口、定时器、IIC还是EXTI GPIO都由一个叫做NVIC即“嵌套向量中断控制器”来管理,NVIC的主要功能可以概括为:1. 中断管理;2.支持异常及中断向量化处理;3.支持嵌套中断。, w: {' L2 a2 d

9 P" W. [4 N9 m! h/ L# @! d! | 843126d0d14e429b9f7e85f8c45ea2e5.png
" _6 ?2 S0 }' J4 G1 T& \! X3 q- a0 V5 b  P
  图4 STM32F0中断的体系结构
: x4 R& \' I- w$ X( M$ \7 R0 t, {5 I! S0 k5 e% J
1. 中断管理9 Y1 `: k3 [& _, {% @

" _' c. o" |3 ?$ @  i" e       Cortex-M0处理器中,每一个外部中断都可以被使能或者禁止,并且可以被设置为挂起状态或者清除状态。处理器的中断可以电平的形式的,也可以是脉冲形式的,这样中断控制器就可以处理任何中断源,如图5所示是Cortex-M0处理器中的NVIC常用寄存器地址,例如ISER表示对一个中断的使能、ICER表示对一个中断的禁止、ISPR表示一个挂起寄存器的设置、ICPR表示清除挂起寄存器、IPR0-7表示对一个中断源优先级的配置。6 b! Y$ @& `8 M- d; O$ [. h
( ?- ?! [6 G  u7 K/ c4 X+ X; [8 f7 a
0794e0efe58e496ca907729dce502a4a.png
3 c+ o' J5 R' n8 v" c9 `
% y4 m7 g4 V' |2 h图5 Cortex-M0处理器的NVIC常用寄存器地址4 s3 v) F! j2 p! S

0 x8 R( o! j# d" {% J3 q  Q2.支持异常及中断向量化处理% D" S7 |+ ?( S: j

7 F/ J2 Y; L2 h1 ?. K         如图6所示是Cortex-M0处理器的中断和异常向量表,Cortex-M0内核可以处理15个内部异常,和32个外部中断。STM32F051实际上只使用了6个内部异常和28个外部中断。当异常或中断发生时,处理器会把PC设置为一个特定地址,这一地址就称为异常向量。每一类异常源都对应一个特定的入口地址,这些地址按照优先级排列以后就组成一张异常向量表。  向量化处理中断的好处    统的处理方式需要软件去完成。采用向量表处理异常,M0处理器会从存储器的向量表中,自动定位异常的程序入口,从发生异常到异常的处理中间的时间被缩减。2 d3 G, i# W" ~, e+ G* l
9 x2 m& h( r1 e0 w( q
aad9550e4f5946a6af18cd06c7af9294.png
% c+ @! |  Q4 V) `  M
1 H/ n$ n2 I2 O图6 Cortex-M0处理器的中断和异常向量表; N/ w) `0 i. ~, E; k* [
9 V9 N5 |$ p% c# q& q+ Z! {3 }2 y
        中断和异常的区别: 中断是微处理器外部发送的,通过中断通道送入处理器内部,一般是硬件引起的,比如串口接收中断,而异常通常是微处理器内部发生的,大多是软件引起的,比如除法出错异常,特权调用异常等待。不管是中断还是异常,微处理器通常都有相应的中断/异常服务程序,如图7所示是Cortex-M0处理器的NVIC中断编号,大家可以看到1-15即Cortex-M0内部的异常,16以上为外设的中断。
4 {( L7 L& ^8 g+ K* _8 {$ P
( x; t& C# P7 `' X9 p+ y befb39aa2d5c47f785602a861c902cd1.png ' j4 \2 m3 p0 r: q. B4 O
9 ?5 `  W* ?. Z2 M& A2 l
图7 Cortex-M0处理器的NVIC中断编号- \/ u8 b' H& r( [# ]

9 ]3 @. X( u3 Q3.支持嵌套中断4 _$ r2 r, v8 Q
) y8 {/ K& Q5 |  u, ]5 B& k
       如图8所示是Cortex-M0处理器的优先级配置STM32F0中断的优先级,不同优先级的中断同时发生,优先处理优先级编号较小的那个同样优先级的中断同时发生,中断向量号较小的那个优先响应: 3个固定的优先级,都是负值不能改变 ;4个可编程优先级,用两个bit位表示,00,01,10,11 ;优先级越小优先级越高
  U. p. }: X1 J6 ^! o  k. N1 U  Y" A  X' Z
5427e1d1201c4160b85d6000b0ff7c59.png
) R3 g0 f) Y9 }
+ G1 Q# l' L: I  j& G图8 Cortex-M0处理器的优先级配置0 T, ?1 O+ K8 P7 T
————————————————# y3 s# o. `  ?0 N: w
版权声明:青青豌豆
- r3 g* H% B! z- z0 Y7 m) ^- p3 ?, O3 P) F  r
赞 收藏 评论0 发布时间:2022-10-31 23:35

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版