hal库开启中断关中断_(2)STM32使用HAL库操作外部中断——理论讲解
1.中断触发过程
对主程序压栈——把中断服务函数的地址写入到程序计数器(PC)——执行中断服务函数
2.中断向量表
中断服务函数的地址在STM32的手册上的中断向量表中(如下是一部分):
如上表所示,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库中代码是这样执行的:
(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中断控制器来专门管理中断。我们都知道高优先级的中断能打断低优先级的中断优先执行,等高优先级中断执行完之后在返回去执行被打断的中断,这就是中断嵌套。那么如果同时有两个同样优先级的中断出现呢?
于是STM32所有中断都有两个优先级:抢占优先级和副优先级。(英文是 preempition priority和sub priority)
判断中断的优先级,先看抢占优先级,抢占优先级高的中断优先级别高。抢占优先级相同的情况下,先执行副优先高的的。抢占优先级和响应优先级相同的情况下,根据中断向量表确定。
在Cube中配置NVIC如下图
上图所示,使能EXIT line[15:10]中断,抢占优先级是0,副优先级也是0。
那么,共有多少个抢占优先级多少个副优先级呢?
这就要涉及到另一个概念优先级分组了:
上图中的“4.优先级分组”中显示的是2bit for preemption priority,什么意思呢?
STM32以4个比特位表示中断的抢占优先级和副优先级
在这里可以为抢占优先级分配几个bit位。
怎么用呢?举个栗子就很明白了:
假如我设置 3 bit for preemption priority,那么抢占优先级就有2的3次方(8)个优先级,于是副优先级就有2的1(4-3)次方(2)个。如下两个图
hal库开启中断关中断_(2)STM32使用HAL库操作外部中断——理论讲解相关推荐
- stm32cubeide外部中断_【STM32】HAL库 STM32CubeMX教程三----外部中断(HAL库GPIO讲解)
前言 上一节我们讲解了STM32CubeMX的基本使用和工程的配置,那么这一节我们正式来学习CubeMX配置STM32的各个外设功能了 今天我们会详细的带你学习STM32CubeMX配置外部中断,并且 ...
- STM32系统学习——EXTI(外部中断)
一. EXTI 简介 EXTI(External interrupt/event controller)-外部中断/事件控制器,管理了控制器的 20个中断/事件线.每个中断/事件线都对应有一个边沿检测 ...
- STM32 基础系列教程 3 – 外部中断
前言 学习stm32 GPIO 的外部中断使用,用中断模式实现简单的按键输入功能,用按实现基础实验二中的LED亮灭切换功能! 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的 ...
- STM32入门篇2之外部中断
外部中断 STM32入门统一版完整链接(更新中): 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置 ...
- 外部中断器1C语言程序,单片机C语言代码:外部中断,按下中断按键LED不亮,LED1正常亮...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 * 名称:外部中断 * 日期:2013-9-10 * 晶振:11.0592MHZ ************************************ ...
- 中断按键c语言程序设计,单片机C语言代码:外部中断,按下中断按键LED不亮,LED1正常亮...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 * 名称:外部中断 * 日期:2013-9-10 * 晶振:11.0592MHZ ************************************ ...
- android手机红外代码HAL,手机红外遥控器发送红外信号到STM32【HAL库】
现在大部分手机上都有红外遥控功能,而且好像大部分信号STM32都是可以收到的.现在就使用STM32发送红外信号,由STM32上的红外接收器接收后执行不同的操作.以下是注意事项: 在标准库中有 EXT ...
- STM32开发记录一: 外部中断之软中断SWI使用
一.SWI使用 1.学习FreeRTOS过程中需要软件产生一个中断,stm32提供了很好的方法.直接调用EXTI_GenerateSWInterrupt()即可. 二.具体参考如下: 1.exti配置 ...
- python安装成功第三方库但import出问题_解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程...
一.问题具体描述: 在cmd控制台 pip install xxxx 后并显示安装成功后,并且尝试用cmd 的python 中import xxxx ,没有显示异常,说明这个库是安装成功了的.(这里以 ...
最新文章
- 码书:入门中文NLP必备干货:5分钟看懂“结巴”分词(Jieba)
- pycharm管理多个工程
- mysql 5.74安装教程_MySQL安装、基本账户安全(5.0以后版本)
- 2018安徽省计算机一级试题答案,2018年计算机等一级考试试题100题及参考答案.docx...
- 1小时打造HaaS版小小蛮驴智能车
- 【软件测试】测试计划书
- jQuery判断页面是电脑端还是手机端
- javascript与php数据交换之json
- channelread0会被调用两次_[菜鸟SpringCloud入门]第四章:远程调用服务实战
- 推荐:学习人工智能(AI)的一些网站及教程资源
- 分享一种快速制作证件照的方法,只要你有自拍照就完全ok啦
- 无线电波传播:频段、方式、衰落|瑞利分布、瑞利衰落非复制的解释
- WPF 入门教程RelativeSources
- 计算机系统常见故障及处理,电脑常见故障以及解决方案都在这里
- Python入门:微博注销不了?python一键清空微博文章内容
- 关于使用Python——写模拟手机通讯录查询系统
- C++20 latch
- 华硕固件默认ip,不能进入路由的管理后台了?千万别慌张
- sql按不同纬度拆分时间以及相关时间函数整理
- vim 安装YouCompleteMe 插件