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

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

[复制链接]
Savy1314 发布时间:2017-7-14 15:39
& U: g6 X  B8 J3 l

  z. A7 U! i9 `% g: ~
# o1 E- W2 ^) P! N/ @
STM32学习笔记4——外部中断
1.png
NVIC:
9 @. `% d! b6 m6 {
& P4 B% E2 r4 G2 i' Q* q+ tSTM32F40xx/STM32F41xx的92个中断里面,包括10个内核中断和82个可屏蔽中断,具有16级可编程的中断优先级,而我们常用的就是这82个可屏蔽中断。 : X2 R8 X% r3 X3 ~
那么我们如何管理82个外部中断呢?
; s- \. Q" N+ H首先,对STM32中断进行分组,组0~4。同时,对每个中断设置一个抢占优先级和一个响应优先级值。分组配置在SCB->AIRCR寄存器,如下表: 3 p* O* M) T+ _& n' \9 Z
2.png
2 ^8 b" K- A% B抢占优先级 & 响应优先级区别1.高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。3 T9 B; w# f+ Q" h
2.抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。- F7 ?& a/ d1 j# Q" k9 K/ [3 @
3.抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。  K* p& ?. i' ^
4.如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;: T) V$ c* F% L  A* f
5.数字越小,优先级越高
/ r; }! k% m; W( s注意:一般情况下,系统代码执行过程中,只设置一次中断优先级分组,比如分组2,设置好分组之后一般不会再改变分组。随意改变分组会导致中断管理混乱,程序出现意想不到的执行结果。; ~. Q1 _' [1 w* u/ A  V

$ Q' K" I' q8 u. S$ n+ }相关寄存器配置:1 W5 T+ R: ^$ e9 g+ A
1.中断优先级控制的寄存器组:IP[240] ,高4位用来设置抢占和响应优先级(根据分组)
8 S& Q! l" J( V: g2 P2.中断使能寄存器组:ISER[8],32位寄存器,每个位控制一个中断的使能。STM32F40x只有82个可屏蔽中断,所以只3.使用了其中的ISER[0]~ISER[2]。2 Q) e5 F& l# H5 \  V) v7 B& [
4.中断失能寄存器组:ICER[8],32位寄存器,每个位控制一个中断的失能。STM32F40x只有82个可屏蔽中断,所以只5.使用了其中的ICER[0]和ICER[1]。
* o0 k" O7 G, t; S6.中断挂起控制寄存器组:ISPR[8],作用:用来挂起中断
5 \, V: @9 t" D$ z7.中断解挂控制寄存器组:ICPR[8],作用:用来解除中断0 i% e. L" k4 V; w) N; `' y

" G, e% V, M4 o7 y中断优先级步骤: 3 p% e! [  h8 q) L* R2 E
1.系统运行后先设置中断优先级分组。
( d, Q# a2 _" @0 x7 q/ P1 H4 Y2.针对每个中断,设置对应的抢占优先级和响应优先级
9 c2 C1 T8 A6 N8 X3.如果需要挂起/解挂,查看中断当前激活状态,分别调用相关函数即可。4 M3 M$ G; w/ N" O* O

7 J+ m9 I' K1 `" S* N外部中断
3 I  F3 q8 E* {
0 `2 H% ]; a' @/ YSTM32F4的每个IO都可以作为外部中断输入。STM32F4的中断控制器支持22个外部中断/事件请求:
7 i4 |! i9 t1 O: d( Y) BEXTI线0~15:对应外部IO口的输入中断。/ K5 z7 r- U2 h3 Y( r6 i
EXTI线16:连接到PVD输出。
: \  u) V# r8 u, j; ZEXTI线17:连接到RTC闹钟事件。! g& Y4 f! E) W* `/ I# j$ m
EXTI线18:连接到USB OTG FS唤醒事件。) Q5 N3 W6 P9 v: @/ I* `* P+ }
EXTI线19:连接到以太网唤醒事件。% d+ W# B. ?: [0 J+ O8 ?
EXTI线20:连接到USB OTGHS(在FS中配置)唤醒事件。# d" H8 J8 s: {( t: E) }
EXTI线21:连接到RTC入侵和时间戳事件。0 E7 j  I* ^' B0 G- d; k6 J* w
EXTI线22:连接到RTC唤醒事件。
" a6 k# t( Z9 h. r! m每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。
7 F4 w( q9 c  |8 m% M; L# g% }
% [3 I( q1 p! G我们重点讲I/O口的外部中断。16个外部中断与I/O口映射方式采用下图方式: 6 y- i: K2 \2 g+ d" E7 b

0 J" D. {" X+ e9 ]4 u! iIO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数
' h- Q. y# f- ?% r  L2 X2 ?* D' [8 L" F
从表中可以看出,外部中断线0~4各用一个外部中断,外部中断线5~9分配一个中断向量,共用一个服务函数,外部中断线10~15分配一个中断向量,共用一个中断服务函数。
6 `( i, w/ [0 M0 j9 c1 e2 g3 H8 C+ R+ l& K  Z4 \
外部中断相关寄存器
+ [! l  t  k, M* l1 T8 g, c6 J2 J( B) S# H
1.SYSCFG外部中断n配置器(总共4个,每个控制4个I/O口):9 R8 I7 {& O( C

* J3 g8 z8 L. k6 M2.中断屏蔽寄存器:使能中断
7 }: J5 \# |0 b! c9 R$ P, U7 ~, C0 J1 D: N
3.上升沿/下降沿触发选择寄存器:选择触发方式
- H2 {+ B, `& @) l4 J. i; W5 @1 Z% A1 ^5 {
4.挂起寄存器:将中断挂起或者取消中断挂起。 # p* j# p  o  f1 A/ F
0 B' A% t6 B0 g; Q# _1 x8 C) t

# }& l* E+ C9 K; x: O5 K外部中断的一般步骤:% W" g/ _# }1 G( ~
使能SYSCFG时钟
& _; `2 p5 t, R+ `9 Y初始化IO口为输入
6 u4 i0 Q+ @; j, t5 b+ O3 p设置IO口与中断线的映射关系。
# U) B1 z% e- _. _( ?3 ^+ p$ X初始化线上中断,设置触发条件等, w; h* J* G9 w6 W! C4 t. E+ o: g
配置中断分组(NVIC),并使能中断
" `: W4 m9 G! h8 [; V
" `. j4 i6 U2 k编写中断服务函数,清除中断标志位
1 o8 K1 f+ A- E2 N- c2 R1 ]+ u9 M. P: X& k$ h# R7 ~
11.png
12.png
13.png
14.png
15.png
16.png
收藏 1 评论0 发布时间:2017-7-14 15:39

举报

0个回答

所属标签

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