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

【经验分享】STM32f1的中断系统

[复制链接]
STMCU小助手 发布时间:2021-11-28 21:00
stm32是一款基于cortex m3的单片机,其对中断的控制在核内部,因此stm32对中断处理与cortex m3区别不大
" C- u  B2 e  b# W7 L
" s# D  h# g$ A& o一、几个概念% [% x/ y& U% a

* ^" l5 s+ J* t: R" l0 X4 f' U. j          异常与中断:《权威指南》译者给出的定义为:“所有能打断正常执行流的事件都称为异常”、“异常与中断的区别在于,那240个中断对CM3核来说是‘突发事件’,也就是说该请求信号来自CM3核的外面,对CM3核来说是‘异步’的;而异常则是因CM3核的活动产生的,在执行指令或访问存储器时产生的,对CM3核是‘同步’的”。我认为他第一句和第二句矛盾。对这个问题有两个理解:! v1 ^- d2 D  O; j! j* ?

5 s0 F. s  b0 s1 E        第一种就是第一句的理解。第二种理解为:编号(权威手册表述)0~15的为异常,16~255的‘外部中断’就是中断。我认为这只是概念的冲突,并不影响对芯片的使用,本文采用第一种理解。5 `4 V  M& _  f

2 ^$ b3 R! D/ \9 E6 H- x6 a         外部中断:对这个概念的理解有两个出发点,若讨论内核,则来自核以外的中断,即编号16~255的都叫外部中断。另外一种是从stm32芯片出发来理解,所谓的“外部”是指受EXTI控制的中断。本文研究的是单片机,采用第二种理解,同时把16~255号称为中断。% g* |" j; M& i

9 ?; t4 z- j$ c# v8 l$ G/ q/ x
1342278155_8736.jpg
5 g( u+ A0 |: n/ ]- I, T- O8 `7 ?" p

. a& g5 C) Z, P3 ?( n) C5 s) {        事件与通道。事件还不能算为一个中断。上面谈到的16~255号中断,在stm32中其实是中断通道的概念,多个要申请中断的事件可能会公用一个中断通道,在核看来他们是一样的,只有在中断服务子程序里读标志位才能分辨到底是谁申请的中断。就好像一个宿舍里好几个人,通过一部公用电话给警局报警,警局只知道是这个号码(中断通道)报的警,但不知道是宿舍里哪一个人(事件),若想知道是谁在打电话,则需要询问(读相关标志位,如TIM_GetITStatus(TIM3, TIM_IT_Update))。4 n- q2 W& e: w: d  b- X3 u

2 A5 r, I* P. o; t- P% `) M        CM3核支持240个中断,但是,st采用的只有68个,即68个中断通道。3 q0 g8 @' D( `0 b/ l  S! a  X$ {

2 u; x: N) ?0 M, z; e$ R0 r二、优先级
0 C. Z1 L6 m7 l- h( \2 z$ s! i1 U9 a/ ~) q) h' D4 T% G% ]5 m3 S+ @
        有三个异常,复位、NMI、硬fault的优先级是负的,是最高的,是软件不能编程的,比其他任何异常都高。对他们的理解没有难度,就一个:优先级最高。
' x* M" S6 ^, o0 w0 R/ N
% f$ B; m$ s; R5 T- }        再来看其他的异常,他们也有硬件优先级,随着编号的增大而降低。他们的优先级都是可以编程的,软件优先级权限高于硬件。软件优先级数字越大优先级越低。
' M5 X. W+ p4 Z9 l0 z' _
/ R0 N, K* y, |) R! X+ y        什么叫抢占。当系统正在相应某异常L时,如果来了抢占优先级更高的异常H,则H可以抢占L。
3 a7 a+ ~& T& s. Z# ]
0 y# F- c5 O" p: _" V5 t0 s        那么抢占优先级也就好理解了,它是关于中断嵌套的。从优先级则与嵌套无关,当抢占优先级相同的异常有不只一个挂起时,就最先响应从优先级最高的异常。
/ L( B, R& {6 k: ^1 ^3 N# e
: C* q$ e& s, q3 Q* Q& B        优先级分组。CM3利用一个字节对中断进行优先级分组。即确定这个字节的几位用来表示抢占优先级,几位表示从优先级。stm32没有用完这一个字节,只用了高四位,所以分组最多有16个抢占优先级,最少没有抢占优先级,对的,没有抢占优先级。《权威指南》里“从优先级至少一位”的说法不准确。
7 u( z+ P, D; Y$ x4 O4 }0 i7 W5 @
8 S5 O+ ^" U$ T1 z1 \$ s0 F* R! X        每个中断通道都在NVIC内有一个字节(PRI_N,stm32用到其中高4位)来表示其优先级。, v2 e" b& s2 q  a) w
: y. ^4 H: C$ x* o; h
        这基本能讲通NVIC的原理了。
" c3 V$ e# k8 U; R& n- W# D2 V. A
+ V/ D1 @$ E6 x# Z4 N6 v, P7 N6 H+ g7 O+ m$ l; B) q8 d
收藏 评论0 发布时间:2021-11-28 21:00

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版