hal库开启中断关中断_(2)STM32使用HAL库操作外部中断——理论讲解

更新时间:2023-07-09 00:03:06 阅读: 评论:0

hal库开启中断关中断_(2)STM32使⽤HAL库操作外部中断
——理论讲解freshness
汉娜姐妹南宁会计培训1.中断触发过程撒播
感慨的意思对主程序压栈——把中断服务函数的地址写⼊到程序计数器(PC)——执⾏中断服务函数
2.中断向量表
中断服务函数的地址在STM32的⼿册上的中断向量表中(如下是⼀部分):finance是什么意思
如上表所⽰,EXTI0中断服务函数的地址是0x00000058。意思就是如果触发了外部中断那么就从0x00000058地址开始执⾏,这个地址的函数可以在HAL库的启动⽂件中找到。
很明显,EXTI0的中断服务函数的函数名是:EXTI0_IRQHandler
EXTI0~EXTI4是独⽴的,9~5共⽤中断源,15~10共⽤中断源,9~5和15~10的中断需要在中断函数中判断是哪个中断引脚。
3.HAL库中的中断服务函数。
这⾥我们要⽤PD10引脚触发外部中断,根据向量表,EXTI10的中断服务函数是:EXTI15_10_IRQHandler。
HAL库中代码是这样执⾏的:
swear it again(1)⾸先是中断服务函数
PD10外部中断触发之后程序计数器被写⼊0x000000E0(EXTI15_10_IRQHandler函数的地址)
然后程序开始执⾏EXTI15_10_IRQHandler函数:
EXTI15_10_IRQHandler函数只是调⽤了另⼀个函数HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
在这个函数中清楚中断标志位然后⼜调⽤了⼀个HAL_GPIO_EXTI_Callback(GPIO_Pin)函数。
根据函数名Callback也能看出来这⾥才是真正执⾏具体功能的函数,该函数需要⽤户在mian.c⽂件中重写:
4.NVIC中断控制器
步骤1-3说明了⼀个最基本的中断过程。然⽽还有⼀个重要的概念没有讲到,NVIC中断控制器。
STM32⽀持中断嵌套,为了更好的更强⼤的实现中断嵌套,ST给出了⼀个NVIC中断控制器来专门管理中断。我们都知道⾼优先级的中断能打断低优先级的中断优先执⾏,等⾼优先级中断执⾏完之后在返回去执⾏被打断的中断,这就是中断嵌套。那么如果同时有两个同样优先级的中断出现呢?
pipeline于是STM32所有中断都有两个优先级:抢占优先级和副优先级。(英⽂是 preempition priority和sub priority)
判断中断的优先级,先看抢占优先级,抢占优先级⾼的中断优先级别⾼。抢占优先级相同的情况下,
先执⾏副优先⾼的的。抢占优先级和响应优先级相同的情况下,根据中断向量表确定。
在Cube中配置NVIC如下图
上图所⽰,使能EXIT line[15:10]中断,抢占优先级是0,副优先级也是0。
sunlight
那么,共有多少个抢占优先级多少个副优先级呢?
这就要涉及到另⼀个概念优先级分组了:
上图中的“4.优先级分组”中显⽰的是2bit for preemption priority,什么意思呢?
poachingSTM32以4个⽐特位表⽰中断的抢占优先级和副优先级
在这⾥可以为抢占优先级分配⼏个bit位。
怎么⽤呢?举个栗⼦就很明⽩了:
假如我设置 3 bit for preemption priority,那么抢占优先级就有2的3次⽅(8)个优先级,于是副优先级就有2的1(4-3)次⽅(2)个。如下两个图

本文发布于:2023-07-09 00:03:06,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/171483.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:中断   函数   抢占   服务   触发   地址   概念   中断向量
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图