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

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

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

& P9 V7 F2 G- g( k b8bab34965b543c4b4d89aef2947eea9.jpg - w3 ]2 t1 a8 h7 m, o5 s+ m* u5 H1 S7 t
  ^0 V- I6 o: A6 L
图1 STM32F103RCT6实物' k# z/ f" P8 |; \7 t2 Q

  f) b5 q; ?. X: l5 p       既然是“STM32开发必备知识“就请把基础夯实,如同写“FPGA基础知识”笔者也把常用IP核的仿真、模块划分等知识说明清楚,用了4年STM32芯片个人觉得,有几样东西是在做STM32开发前所必须要掌握的,学习任何知识都有过程,需要循循渐进把握住规律,才可能层层深入。而对于STM32开发:STM32的中断系统、时钟分配、定时器、ADC模数转换、DMA数据搬运、GPIO EXTI中断类型等这些请必须掌握,然后再把C语言的数据结构、函数指针捡起来,相信这些大家在上学的时候多多少少都有学习,这些都搞明白了再动手实践“STM32 10个项目”,这10个项目的选取也费尽心思,一方面参考了市面经典的开发板例程,另一方面更站在了4年产品研发的角度,笔者会把项目的源码开源方便大家后期学习实践。% y7 O/ X  E3 I: E  B

/ G9 D+ [" d) ^1 T0 M# O0 i        什么叫做中断,如图2所示是一个日常生活中的中断,比如现在大家在看电视,然后这时候电话响了,我们要去接电话显然电话比看电视这件事紧急,接完电话这时候又要去取快递了,下楼取快递以后再回来继续看电视,那类似的什么是处理器中的中断呢?
: f' G0 n% T* K$ |+ z
& z  f+ ]7 |* @7 O. v. K7 X& P      在处理器中,中断是一个过程,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中止当前程序的执行,转而去为处理紧急的事件,待处理完毕后再返回被打断的程序处继续往下执行。中断在计算机多任务处理,尤其是即时系统中尤为重要,如uCOS和FreeRTOS等。( E" f# {1 J5 ~. r, N

5 h8 o% i; o0 L' z# u: q0 g 6ab80cb5080b44e4a8b6f5dcb6bfef7f.png : o2 M( B& _3 n

" G- O4 a( j! U 图2 日常生活中的中断0 i. {$ m+ j; M# X# Q4 u
  }0 D: J: h3 T5 `6 q; k" n
        如图3所示是STM32中断处理过程,很多培训机构或者网络教程会说得很复杂繁琐,在这里其实大家只需要记住CPU进入中断前要做什么,退出中断后要做什么即可。' U" S9 p# _1 }% @6 g% i* z, Z
1 Z7 ?2 X. s, h+ f. H7 s  q* @) @
进入中断前6 ]; S; k" K# d" A3 ?, s# r
! o' m! M* F, a1 o& X& }. [2 V
1. 处理器自动保存现场到堆栈里! Q+ k0 R3 r* e: @2 c" Q7 a

! h& G7 R* a0 S0 S( W& k$ |5 M* C2. {PC, xPSR, R0-R3, R12, LR}
0 H3 [) o2 b6 t  ^" _
/ @! k( n7 S- F* l: |! P3. 一旦入栈结束,ISR便可开始执行( ]7 s0 a8 H( k8 {+ l
- h1 o4 P0 j$ q( s. ^4 C- ]
4. 晚到的中断会重新取ISR地址,但无需再次保存现场. o: z8 e, I$ y. z9 b' l. H

# x: p, K$ T4 [1 ~4 V5 J/ G退出中断后' T. [5 S# E( G2 ^" Z/ Q; j* l1 ^
% C) W8 Q0 Q7 u, M- M# c. p
1. 中断前的现场被自动从堆栈中恢复5 l- x7 G7 E- E8 o2 K$ w; Y9 B

0 s, J7 F4 P% H9 L$ X, W& b* [2. 一旦出栈完成,继续执行被中断打断的指令
; F5 `' s, n2 I' S4 }5 y5 O+ ~0 l. q& ~+ e* Z2 ?
3. 出栈的过程也可被打断,使得随时可以响应新的中断, 而不再进行: o4 K) n2 x, l& N2 X  u. ^
7 K- B2 G" c9 t: ^+ L7 P$ z
4. 现场保存' O7 f5 m2 k2 j( ]
0 Q& @/ I% I4 e! G1 X; L4 |- D6 V: F
2c3d4f598082429bb92bbdba816f65ef.png 9 a4 w* L% h. b' b
- G# `: K* D; S
图3 STM32中断处理过程8 L' R$ Y; F6 ]+ u: c- S

* s: s1 F# J2 x; P; q         如图4所示以STM32F0为例,是STM32F0中断的体系结构,在这里以Cortex-M0内部产生的中断,通常叫做“异常”,而外设产生的中断,通常就叫做“中断”,注意到对于外部产生的中断不管是串口、定时器、IIC还是EXTI GPIO都由一个叫做NVIC即“嵌套向量中断控制器”来管理,NVIC的主要功能可以概括为:1. 中断管理;2.支持异常及中断向量化处理;3.支持嵌套中断。" z8 I$ H: x4 A

3 g1 @+ L3 z9 m1 O7 k( A9 d 843126d0d14e429b9f7e85f8c45ea2e5.png % L0 M& L" Q) s% o" a/ o0 I

$ `% a- ^# O  g/ b( V  图4 STM32F0中断的体系结构) U! @& @4 }- j  k! r
. t7 {& ~, y) s
1. 中断管理9 x8 e3 ^$ B3 Q) q! q6 ]6 ~6 P- ]

. F# u1 J0 s- a6 J1 v# @$ `. w       Cortex-M0处理器中,每一个外部中断都可以被使能或者禁止,并且可以被设置为挂起状态或者清除状态。处理器的中断可以电平的形式的,也可以是脉冲形式的,这样中断控制器就可以处理任何中断源,如图5所示是Cortex-M0处理器中的NVIC常用寄存器地址,例如ISER表示对一个中断的使能、ICER表示对一个中断的禁止、ISPR表示一个挂起寄存器的设置、ICPR表示清除挂起寄存器、IPR0-7表示对一个中断源优先级的配置。
8 b$ U& s# @9 z" @0 Q1 F# S
! n# X0 w# R! E7 j 0794e0efe58e496ca907729dce502a4a.png + }0 H( m1 m2 Y$ w7 g5 H
' r5 H" V) D4 R3 j$ N5 _
图5 Cortex-M0处理器的NVIC常用寄存器地址, `; b: Y% V. L5 v6 i! R  ]+ F

# i; C& z/ |# Q3 M% ~2.支持异常及中断向量化处理; t  t5 I; }) O; Z! O# c" c
: K/ d1 |& @/ v+ s  S- x8 z( S
         如图6所示是Cortex-M0处理器的中断和异常向量表,Cortex-M0内核可以处理15个内部异常,和32个外部中断。STM32F051实际上只使用了6个内部异常和28个外部中断。当异常或中断发生时,处理器会把PC设置为一个特定地址,这一地址就称为异常向量。每一类异常源都对应一个特定的入口地址,这些地址按照优先级排列以后就组成一张异常向量表。  向量化处理中断的好处    统的处理方式需要软件去完成。采用向量表处理异常,M0处理器会从存储器的向量表中,自动定位异常的程序入口,从发生异常到异常的处理中间的时间被缩减。
2 Q+ X! y, `8 i. _" E1 [% n) g! G$ w" Q7 V& k  x) }+ T
aad9550e4f5946a6af18cd06c7af9294.png 4 S" `" l3 G( M# M$ u3 g

* }# i/ m3 ~5 L: x& _图6 Cortex-M0处理器的中断和异常向量表
5 p: x# o$ k  {+ z
" p% }/ ~) i" S) Z7 z9 D        中断和异常的区别: 中断是微处理器外部发送的,通过中断通道送入处理器内部,一般是硬件引起的,比如串口接收中断,而异常通常是微处理器内部发生的,大多是软件引起的,比如除法出错异常,特权调用异常等待。不管是中断还是异常,微处理器通常都有相应的中断/异常服务程序,如图7所示是Cortex-M0处理器的NVIC中断编号,大家可以看到1-15即Cortex-M0内部的异常,16以上为外设的中断。
, m% j/ r1 ?; Q# n8 f
5 P6 I% e6 M; C! @: b' G$ q befb39aa2d5c47f785602a861c902cd1.png ' N+ W! }# Y4 e7 j

. h6 T6 L0 X6 T* p图7 Cortex-M0处理器的NVIC中断编号% n5 S2 l  O+ Q% x/ W' x6 g, p

$ X. N( P3 z% t% T# \$ s3.支持嵌套中断
. }' c+ P% {7 |% n' h* V
$ ?, V: s" U& w) T8 R# q% ?+ ^" u3 A       如图8所示是Cortex-M0处理器的优先级配置STM32F0中断的优先级,不同优先级的中断同时发生,优先处理优先级编号较小的那个同样优先级的中断同时发生,中断向量号较小的那个优先响应: 3个固定的优先级,都是负值不能改变 ;4个可编程优先级,用两个bit位表示,00,01,10,11 ;优先级越小优先级越高) {) p6 O  ^8 T+ F. K+ P3 {: D. E

& z3 v) {) C: e3 L& N! K6 x, n  [ 5427e1d1201c4160b85d6000b0ff7c59.png
" H: z; B) p2 p% [$ L1 J. e
  h' B& m. @  v4 g- ?# g! _, t; L图8 Cortex-M0处理器的优先级配置
( i# s% M. V! d# i6 h$ O————————————————$ @8 s$ X& o' ~- d% C- |6 J* C9 {
版权声明:青青豌豆# P- @& s! ^. I4 B- \) R

# a9 i; L, K0 p/ u, V1 }0 k) l
收藏 评论0 发布时间:2022-10-31 23:35

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版