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

STM32学习笔记4——外部中断

[复制链接]
Savy1314 发布时间:2017-7-14 15:39

1 J7 r* }" g2 V
) ^, c! e: L& A6 g! X
+ W; w& L, i- I3 o
STM32学习笔记4——外部中断
1.png
NVIC:
* F. V: c- k3 D+ w* ^$ {  w4 U/ @5 N; t: z
STM32F40xx/STM32F41xx的92个中断里面,包括10个内核中断和82个可屏蔽中断,具有16级可编程的中断优先级,而我们常用的就是这82个可屏蔽中断。
" W% `6 C2 g& u2 x1 f. e% w那么我们如何管理82个外部中断呢?
: e5 b+ t+ ]' W$ m/ M7 T首先,对STM32中断进行分组,组0~4。同时,对每个中断设置一个抢占优先级和一个响应优先级值。分组配置在SCB->AIRCR寄存器,如下表:
9 }. F5 E9 F! T( G& I- b 2.png # J/ E8 ]6 K9 o7 a+ e& Y5 a# Y
抢占优先级 & 响应优先级区别1.高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。
6 f% F$ K6 Z, ]  f9 y) y( S% f2.抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。
- B1 Z) g/ P7 W& i) G1 k3.抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。2 y- v$ i8 M% x% c1 h% {/ }
4.如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;
4 E1 C$ j, r$ q5 P4 N5.数字越小,优先级越高0 s) h+ }0 s+ B+ A7 |& @
注意:一般情况下,系统代码执行过程中,只设置一次中断优先级分组,比如分组2,设置好分组之后一般不会再改变分组。随意改变分组会导致中断管理混乱,程序出现意想不到的执行结果。
: n, c- B5 g5 a- {! Q
' e1 H1 d- y. s- ]: b相关寄存器配置:
8 i* @( i% C4 b" h  H" O1.中断优先级控制的寄存器组:IP[240] ,高4位用来设置抢占和响应优先级(根据分组)
, \; F- s) n" ?! n( g2.中断使能寄存器组:ISER[8],32位寄存器,每个位控制一个中断的使能。STM32F40x只有82个可屏蔽中断,所以只3.使用了其中的ISER[0]~ISER[2]。5 J9 T% y  H4 R0 Y$ g3 T8 B! A
4.中断失能寄存器组:ICER[8],32位寄存器,每个位控制一个中断的失能。STM32F40x只有82个可屏蔽中断,所以只5.使用了其中的ICER[0]和ICER[1]。
: q  I/ J, b4 R% N# O3 O6.中断挂起控制寄存器组:ISPR[8],作用:用来挂起中断9 [0 E3 U1 K0 ~6 Y" o
7.中断解挂控制寄存器组:ICPR[8],作用:用来解除中断0 \/ D( B- Q, }4 f. u' E% \
" T* j& T7 ?/ s& `9 w0 Q
中断优先级步骤: 5 w1 \, J4 x$ C) J2 U8 P4 ?9 }
1.系统运行后先设置中断优先级分组。
; E! }+ ]8 Y/ H  n- j2.针对每个中断,设置对应的抢占优先级和响应优先级
+ U5 M9 o8 d; k3.如果需要挂起/解挂,查看中断当前激活状态,分别调用相关函数即可。! A; d) U9 u" q8 k+ X2 W! U% H
6 I. w. k8 u! G$ {" K) q
外部中断
3 F7 j3 I2 a! w6 m, n, H
( @- e# V; s7 f# xSTM32F4的每个IO都可以作为外部中断输入。STM32F4的中断控制器支持22个外部中断/事件请求:
6 [4 y( r# S% V$ [EXTI线0~15:对应外部IO口的输入中断。/ h1 ~5 f7 x0 s( p
EXTI线16:连接到PVD输出。4 V& T* _5 y, W6 }
EXTI线17:连接到RTC闹钟事件。
+ S9 ]; \) C+ O& |- QEXTI线18:连接到USB OTG FS唤醒事件。
/ d- X' }  |! F5 cEXTI线19:连接到以太网唤醒事件。7 \6 G3 D+ d7 [
EXTI线20:连接到USB OTGHS(在FS中配置)唤醒事件。
$ d) p* I6 O1 F3 Q, _+ ?EXTI线21:连接到RTC入侵和时间戳事件。
  B. U- W! K& b  J6 SEXTI线22:连接到RTC唤醒事件。
: p$ p6 G& u! q, W" ]& Y, P每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。 6 L6 [# ]& ]9 y

2 u- B' {% z6 {2 y我们重点讲I/O口的外部中断。16个外部中断与I/O口映射方式采用下图方式: ) z) s3 l3 ]" W! Y$ @

- I4 c* z/ [2 {% t) `. e, yIO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数7 H! ]# L/ q1 y7 `# y; Q
, j) z' W0 m; B$ n
从表中可以看出,外部中断线0~4各用一个外部中断,外部中断线5~9分配一个中断向量,共用一个服务函数,外部中断线10~15分配一个中断向量,共用一个中断服务函数。
! P& s( i& A3 W+ V# E9 _" G7 T. H9 G
外部中断相关寄存器7 o7 I/ U" o' K2 p
4 n# B8 N+ T( U# w5 V+ k
1.SYSCFG外部中断n配置器(总共4个,每个控制4个I/O口):
& f0 T$ l; X, h2 L, M
1 I, e) n: Q' L* L1 z; I0 T2.中断屏蔽寄存器:使能中断
+ A& E# k9 O5 E  I4 O* K" ?. U8 z# Y
3.上升沿/下降沿触发选择寄存器:选择触发方式
2 V! [( r0 A+ {7 O  r  L
4 j  x/ p, q0 d. Z) j# h' ?4.挂起寄存器:将中断挂起或者取消中断挂起。
* B- a8 Y8 v  G  k
" z8 d- Q0 x! Z5 J4 m  _9 r
" i6 L# Z* J( G5 \外部中断的一般步骤:1 `* a9 s' i# m+ y, p" c1 `& Q
使能SYSCFG时钟
/ J0 S' \; z. A# o! V; E0 B6 g初始化IO口为输入
, c& D7 H# m- |/ L8 a1 m1 ~0 i设置IO口与中断线的映射关系。
6 e" v: E) H& V% Q$ D+ {3 S初始化线上中断,设置触发条件等" s8 `/ s/ _2 p9 c7 T
配置中断分组(NVIC),并使能中断7 d" H, `: w( }3 @/ n
9 m/ E7 i1 P0 L) k0 j* x- ^7 L
编写中断服务函数,清除中断标志位. B0 M( x* J( l( u

# `, [5 h$ R# D$ a% A
11.png
12.png
13.png
14.png
15.png
16.png
赞 收藏 1 评论0 发布时间:2017-7-14 15:39

举报

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