
本帖最后由 野火_firege 于 2016-9-3 09:29 编辑 ( s1 f f/ p) M, R0 p3 H 0 z2 p+ C) ^/ q% I; s 提示:systick是内核的外设,其他外设比如串口,adc等是内核之外的。 , v: u% ]" ^9 Y- \) ] 答案分析:5 b) `+ V; {" n 1、只要内核的优先级可以配置,那么内核的优先级就不是一定比外设的高,而是要先比较软件优先级,如果软件优先级一样,那么就比较他们的硬件的中断编号,编号就是在中断向量表中的位置,越小,优先级越高。 6 Q' o1 s; j4 f 2、以systick为例,在systick的固件库初始化函数:SysTick_Config(uint32_t ticks) 中,调用了NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); ,这里面把 systick的 优先级配置为 :1<<4-1 = 15,这里面的4是因为STM32 使用4个位来配置中断优先级。. s( @! B! B4 g! S2 `# E ; j& L. U/ B2 ^! D5 A% H1 d% a 3、那么问题来了,这里systick的中断优先级配置成15,应该是最低的,那跟外设来比,那是systick的优先级比外设是高还是低? 这个得看 外设 配置 中断优先级时的优先级分组。+ k I' i1 Z# l' s+ ]+ P: _+ Q5 B9 ` : k @4 Y/ Y, |/ q9 [- A 4、如果分组为 2,那抢占优先级和子优先级各有2个位表示优先级,抢占的取值范围为0~3,子优先级的取值范围为:0~3。那这时systick的优先级15,该怎么对比,只需要把15转换成二进制:1111,这四位同样受优先级分组的控制,即前两位表示抢占优先级,那就是3,后两位表示子优先级,也是3。在分组2里面都是最低的。如果你的外设也配置成组2,主和子优先级配置的不是3,那就肯定比systick的优先级高。9 A7 J% z# ^5 t; e5 q- T3 t: @) C) J ' N& H" w. A: g0 P! T+ u 5、内核的优先级并非一定比外设的优先级高,只要你的优先级可以配置。# C4 v8 Y5 j$ S 其他资料链接,有需要的可以下载。) g" f3 Q" k$ D 【秉火STM32-视频教程 优酷 观看地址】 1-200集STM32F429视频教程,从0开始手打代码教学!而不是拿写好的代码讲解! 2-150集STM32F103视频教程,从0开始手打代码教学!而不是拿写好的代码讲解!$ k, l# X; Y u& ? 3-优酷观看链接:http://i.youku.com/firege 【不断更新,记得收藏】 ! q5 `. ?) [+ T! {3 V1 v 【秉火STM32-视频+程序+书籍 下载地址】 F103-霸道光盘资料:http://yunpan.cn/cBUab8r9vpf3B 访问密码 8d7e7 o6 z4 L6 Q8 m2 g* ~) p' G2 a F103-指南者光盘资料:http://yunpan.cn/cBUaNcjtqCsyI 访问密码 e21a F429-挑战者光盘资料:http://yunpan.cn/cRiEnMsyqzxAE 访问密码 246a |
看过系统配置文件的都应该知道的
SYStick是核心中断中级别最低的,但是和外设比是要看外设的设置了
" n3 d( I( I0 e
/* System interrupt init*/
/* MemoryManagement_IRQn interrupt configuration */5 |$ ~3 t3 l I! N
HAL_NVIC_SetPriority(MemoryManagement_IRQn, 0, 0);
/* BusFault_IRQn interrupt configuration */
HAL_NVIC_SetPriority(BusFault_IRQn, 0, 0);
/* UsageFault_IRQn interrupt configuration */+ {) r- O, u2 d6 H& {! I9 W
HAL_NVIC_SetPriority(UsageFault_IRQn, 0, 0);, z+ S: p- u# y2 g0 b
/* SVCall_IRQn interrupt configuration */$ E" g, h" C4 [7 H
HAL_NVIC_SetPriority(SVCall_IRQn, 0, 0);' Q& l% m P$ _
/* DebugMonitor_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DebugMonitor_IRQn, 0, 0);
/* PendSV_IRQn interrupt configuration */
HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);0 Q. ^ i$ k# k+ Y
/* SysTick_IRQn interrupt configuration */
HAL_NVIC_SetPriority(SysTick_IRQn, 15, 0);9 c8 L! Z) y+ e! l
$ I. M* k( H$ a. Q% k/ I1 n
7 N* X% H" J o2 d
《STM32库开发实战指南—基于STM32F429》即将出版,开源电子版6 I3 o' P9 Z4 X u/ ]/ ^
https://www.stmcu.org.cn/module/foru ... 569&fromuid=3255788
(出处: 意法半导体STM32/STM8技术社区)
回答错误
错了
yes