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

【经验分享】STM32 中断和事件

[复制链接]
STMCU小助手 发布时间:2022-4-2 21:00
01. 嵌套向量中断控制器 (NVIC)
! C  H  K' |( d, }; U3 O5 GNVIC 特性
/ N. A& \$ t5 p; a

: h. O* |4 p0 J+ l) L- M% V嵌套向量中断控制器 NVIC 包含以下特性:5 d' d  N, e* w$ L$ d
● STM32F405xx/07xx 和 STM32F415xx/17xx 具有 82 个可屏蔽中断通道,STM32F42xxx和 STM32F43xxx 具有多达 86 个可屏蔽中断通道(不包括 Cortex™-M4F 的 16 根中断线)4 j  M8 {7 f9 @1 c8 l) I. p
● 16 个可编程优先级(使用了 4 位中断优先级)$ r- U7 b% g1 V( ^( g) J
● 低延迟异常和中断处理
+ y; W! }2 @! v● 电源管理控制! b) d* _% C* ?1 }3 A" W' M
● 系统控制寄存器的实现9 `/ @% \# E9 M, I$ M* {- h
嵌套向量中断控制器 (NVIC) 和处理器内核接口紧密配合,可以实现低延迟的中断处理和晚到中断的高效处理。( [& O' v# N# F- Y/ \) H% |, R/ p

( a# J( t( ^7 a9 F% u3 c02. 外部中断/ 事件控制器 (EXTI)* g1 y% e1 X7 L3 }& @
外部中断/事件控制器包含多达 23 个用于产生事件/中断请求的边沿检测器。每根输入线都可单独进行配置,以选择类型(中断或事件)和相应的触发事件(上升沿触发、下降沿触发或边沿触发)。每根输入线还可单独屏蔽。挂起寄存器用于保持中断请求的状态线。! ~  A2 ?& T" f& ]/ w4 k

7 b- K: g$ Z) eEXTI 控制器的主要特性如下:
3 j5 T. G4 p' [. C+ O3 i● 每个中断/事件线上都具有独立的触发和屏蔽
- _& N2 }, B" n9 K7 W( t● 每个中断线都具有专用的状态位& c+ X2 k# ~0 ^0 J/ p' I6 Y2 G# y
● 支持多达 23 个软件事件/中断请求
4 J3 L7 Z9 h7 \  E● 检测脉冲宽度低于 APB2 时钟宽度的外部信号。有关此参数的详细信息,请参见STM32F4xx 数据手册的电气特性部分。
  m1 S& O2 H2 x" O  v3 A
( I7 `9 I6 P/ tEXTI框图
- g+ z* l% [5 \- [: p+ ?
' k) ], O: r( c9 {* p4 { HM0@_HV3%3G3TYT}DTD]}@S.png
2 k( f% A, e5 ?7 o+ q
0 }$ N' a" _) p# e0 n, S9 A唤醒事件管理
% |* f/ n, I, ~6 k. w
% S2 P! I/ ?% n( ASTM32F4xx 能够处理外部或内部事件来唤醒内核 (WFE)。唤醒事件可通过以下方式产生:1 a9 d8 j# M; a% M

# V2 O- C. R$ ?* q) @: s: _● 在外设的控制寄存器使能一个中断,但不在 NVIC 中使能,同时使能 Cortex™-M4F 系统控制寄存器中的 SEVONPEND 位。当 MCU 从 WFE 恢复时,需要清除相应外设的中断挂起位和外设 NVIC 中断通道挂起位(在 NVIC 中断清除挂起寄存器中)。" D8 x( g& |3 g3 N: u  d3 K

  v2 @& w$ s1 |1 v. d● 配置一个外部或内部 EXTI 线为事件模式。当 CPU 从 WFE 恢复时,因为对应事件线的挂起位没有被置位,不必清除相应外设的中断挂起位或 NVIC 中断通道挂起位。
/ Z, M; r8 i- D1 v7 N4 a
8 j% {8 o7 m- z! l) k9 x, U2 s功能说明
! f* d' Q' Y" n8 e; D) R2 _( x/ l- B$ D
要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置 2 个触发寄存器,同时在中断屏蔽寄存器的相应位写“1”使能中断请求。当外部中断线上出现选定信号沿时,便会产生中断请求,对应的挂起位也会置 1。在挂起寄存器的对应位写“1”,将清除该中断请求。6 D4 F1 k, H" R2 P. C, v. e

" x/ Y2 i) j& D% C/ U要产生事件,必须先配置好并使能事件线。根据需要的边沿检测设置 2 个触发寄存器,同时在事件屏蔽寄存器的相应位写“1”允许事件请求。当事件线上出现选定信号沿时,便会产生事件脉冲,对应的挂起位不会置 1。2 u  R: X. F+ d# M
1 l* R5 i2 N7 Y: T+ p) n* i
通过在软件中对软件中断/事件寄存器写“1”,也可以产生中断/事件请求。" x% B6 e) H, v; T8 x' Q! d, w" F
( {4 c, X3 i0 B
硬件中断选择8 u2 x3 n3 i( o! R! J
要配置 23 根线作为中断源,请执行以下步骤:8 H; A( e" v! t0 s* [5 h
● 配置 23 根中断线的屏蔽位 (EXTI_IMR)# U, D0 M$ y: g1 D  ~8 y! O* L
● 配置中断线的触发选择位(EXTI_RTSR 和 EXTI_FTSR)3 ^. Y9 ^4 ~2 e0 {) t/ C, Z: H
● 配置对应到外部中断控制器 (EXTI) 的 NVIC 中断通道的使能和屏蔽位,使得 23 个中断线中的请求可以被正确地响应。8 T. l2 A3 T: z/ [  A! Y9 L
# G& e' `( p& [, d% o) L( X' b
硬件事件选择
" b* z4 N! F/ }" ^0 \要配置 23 根线作为事件源,请执行以下步骤:
# t% M0 G9 U# _! u6 c5 K& S● 配置 23 根事件线的屏蔽位 (EXTI_EMR)
, G  c/ M; H( ~* Q2 r2 a, r7 h+ A● 配置事件线的触发选择位(EXTI_RTSR 和 EXTI_FTSR)
! Z) A# ~1 |$ m" P# B
" e9 o$ y! ]& f8 y, a" I! J0 R软件中断/ 事件选择
4 r! o& M$ h4 r可将这 23 根线配置为软件中断/事件线。以下为产生软件中断的步骤。
, y! `- l* b# e! W  A/ d9 C● 配置 23 根中断/事件线的屏蔽位(EXTI_IMR、EXTI_EMR)
: z  C7 k: v+ M) j( I  o● 在软件中断寄存器设置相应的请求位 (EXTI_SWIER)+ ~% {- E- \$ K, X& i( ]' R( L
6 c/ f7 t7 h4 K0 }9 W3 ]* {
外部中断/ 事件线映射' M3 j4 A* E/ y  j" y# n
多达 140 个 GPIO(STM32F405xx/07xx 和 STM32F415xx/17xx)通过以下方式连接到 16 个外部中断/事件线:
- q3 i* C. B. n1 q1 o$ c% _3 V5 \8 {/ u; v$ A
20200823105024220.png ) Z9 l+ g- F4 R; Q) u3 _9 |; o# ^
0 b! q+ i6 Z& u, \
另外七根 EXTI 线连接方式如下:
- S& X2 \% H4 w6 Q6 I/ K9 {● EXTI 线 16 连接到 PVD 输出
8 U7 z8 {! E: _: e' ~● EXTI 线 17 连接到 RTC 闹钟事件
& w" h' O  ^$ `* W0 b2 N! c4 R● EXTI 线 18 连接到 USB OTG FS 唤醒事件8 f8 S  |  [1 R7 l2 E: M4 h* q
● EXTI 线 19 连接到以太网唤醒事件
9 d: c4 L. I, E* {6 N! K! Z/ I● EXTI 线 20 连接到 USB OTG HS(在 FS 中配置)唤醒事件
3 T- s: I2 |) {: O) |% Q● EXTI 线 21 连接到 RTC 入侵和时间戳事件7 M- p$ G, v. H
● EXTI 线 22 连接到 RTC 唤醒事件' t# \! P9 D+ H5 T

7 N4 r6 o  y4 B1 J03. EXTI寄存器
" B# a8 X7 m3 v* z  V3 S3 S3.1 中断屏蔽寄存器 (EXTI_IMR)

  c. _, W# n6 ]. P2 e/ l/ r0 @3 OInterrupt mask register* K2 a! }. K& n1 C/ {: ?
偏移地址:0x00
  O4 J) ~8 S2 S! V' g- C, P1 A复位值:0x0000 0000) \7 ^& ?: ^- X* [/ v

" ]( y9 i) M. N3 X6 v0 k G~7@`D`Y@0RPH7P(N]$KP8Q.png
6 @2 \+ @- E  [, I0 m4 E* F/ F
  G0 g. G+ h9 r4 B2 b4 y3.2 事件屏蔽寄存器 (EXTI_EMR)4 k4 r" q0 F  p
Event mask register% c5 s/ o: [4 p9 B5 J, k- }
偏移地址:0x04
" Z; l2 V8 a% u* l3 S' i复位值:0x0000 0000) V! s7 R! ~# A
! O# ?! e, [& O8 g
R(`GU)Y[F%`L0YY87~C9MLR.png , ]" {3 h7 A( s1 r4 D( @1 P

- `; l# b7 r/ }0 T# R: C0 k; o3.3 上升沿触发选择寄存器 (EXTI_RTSR)
8 ~! x; k+ B- y- D2 WRising trigger selection register5 U3 o$ w# C. G1 S" e
偏移地址:0x08
6 P# l5 T7 v! b  M复位值:0x0000 00003 i) I7 h6 J4 w5 U! B

. s$ G  i: O% j! ^; F, h DACQRK`P3N~XMV_P`5}A36U.png
4 j  a  s7 t8 A9 ^$ r% |! c
; d( z& Y. z7 k' D. k- X; I3.5 下降沿触发选择寄存器 (EXTI_FTSR)
5 D7 i1 ?; V( L& s* J# NFalling trigger selection register- H' F; M: i8 v$ w  f
偏移地址:0x0C
7 g( F4 p1 ]/ B0 g1 h' k复位值:0x0000 0000" d4 m' V* J7 g8 c, H: ~

! L+ c, V% N7 I/ [0 o+ {8 z: i7 {2 B; @0 n

0 ^' \! z6 _; P2 k* r0 i3.6 软件中断事件寄存器 (EXTI_SWIER)# x) p9 g) m( b+ U! t- |
Software interrupt event register
% N4 h' K- p- |2 Y8 D% [- E4 R& y7 _偏移地址:0x10- ]+ ]! a2 Z8 ^' D$ g
复位值:0x0000 0000) N! X" O, H5 j9 S, O/ F
% s, q! n+ e: b* N; [
6 v5 l' G: _: V) R
4 Y2 G1 Z3 ]5 N- Q8 {
3.7 挂起寄存器 (EXTI_PR)
0 w/ m8 }! y+ ^- g. hPending register
# ]8 T- K1 ]" P# t/ F1 E# u: i偏移地址:0x146 _; m, K" x' N- Y8 z5 Z. J
复位值:未定义) t) m6 \0 B4 u6 C' F' ?
, c0 s: F7 @0 ^5 ~9 b: Q& |
V~KEKQ(@0HY@~(8`JCL_C%V.png - n4 Q" f) D2 D' s
2 ?4 ^0 s& t: t. ]
04. EXTI寄存器映射
9 D1 j+ ~3 V8 ^$ [1 P% G. ^
' f5 y: T0 q/ L2 R9 V 20200823105151124.png
/ ]- H, _7 q% W0 c0 \# Z6 \
: |& d1 N3 l; E7 }6 i- m  }
; O, n( x! o  [; _' g0 f, S# h
9 a3 U0 X4 V: l5 t2 i# z. C
OL]L6LFBE10C6(`W5JU]0L7.png
1X6WYZXMT)))KXE87%]L`O3.png
收藏 评论0 发布时间:2022-4-2 21:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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