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库操作外部中断——理论讲解相关推荐

  1. stm32cubeide外部中断_【STM32】HAL库 STM32CubeMX教程三----外部中断(HAL库GPIO讲解)

    前言 上一节我们讲解了STM32CubeMX的基本使用和工程的配置,那么这一节我们正式来学习CubeMX配置STM32的各个外设功能了 今天我们会详细的带你学习STM32CubeMX配置外部中断,并且 ...

  2. STM32系统学习——EXTI(外部中断)

    一. EXTI 简介 EXTI(External interrupt/event controller)-外部中断/事件控制器,管理了控制器的 20个中断/事件线.每个中断/事件线都对应有一个边沿检测 ...

  3. STM32 基础系列教程 3 – 外部中断

    前言 学习stm32 GPIO 的外部中断使用,用中断模式实现简单的按键输入功能,用按实现基础实验二中的LED亮灭切换功能! 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的 ...

  4. STM32入门篇2之外部中断

    外部中断 STM32入门统一版完整链接(更新中): 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置 ...

  5. 外部中断器1C语言程序,单片机C语言代码:外部中断,按下中断按键LED不亮,LED1正常亮...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 * 名称:外部中断 * 日期:2013-9-10 * 晶振:11.0592MHZ ************************************ ...

  6. 中断按键c语言程序设计,单片机C语言代码:外部中断,按下中断按键LED不亮,LED1正常亮...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 * 名称:外部中断 * 日期:2013-9-10 * 晶振:11.0592MHZ ************************************ ...

  7. android手机红外代码HAL,手机红外遥控器发送红外信号到STM32【HAL库】

    现在大部分手机上都有红外遥控功能,而且好像大部分信号STM32都是可以收到的.现在就使用STM32发送红外信号,由STM32上的红外接收器接收后执行不同的操作.以下是注意事项: 在标准库中有  EXT ...

  8. STM32开发记录一: 外部中断之软中断SWI使用

    一.SWI使用 1.学习FreeRTOS过程中需要软件产生一个中断,stm32提供了很好的方法.直接调用EXTI_GenerateSWInterrupt()即可. 二.具体参考如下: 1.exti配置 ...

  9. python安装成功第三方库但import出问题_解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程...

    一.问题具体描述: 在cmd控制台 pip install xxxx 后并显示安装成功后,并且尝试用cmd 的python 中import xxxx ,没有显示异常,说明这个库是安装成功了的.(这里以 ...

最新文章

  1. 码书:入门中文NLP必备干货:5分钟看懂“结巴”分词(Jieba)
  2. pycharm管理多个工程
  3. mysql 5.74安装教程_MySQL安装、基本账户安全(5.0以后版本)
  4. 2018安徽省计算机一级试题答案,2018年计算机等一级考试试题100题及参考答案.docx...
  5. 1小时打造HaaS版小小蛮驴智能车
  6. 【软件测试】测试计划书
  7. jQuery判断页面是电脑端还是手机端
  8. javascript与php数据交换之json
  9. channelread0会被调用两次_[菜鸟SpringCloud入门]第四章:远程调用服务实战
  10. 推荐:学习人工智能(AI)的一些网站及教程资源
  11. 分享一种快速制作证件照的方法,只要你有自拍照就完全ok啦
  12. 无线电波传播:频段、方式、衰落|瑞利分布、瑞利衰落非复制的解释
  13. WPF 入门教程RelativeSources
  14. 计算机系统常见故障及处理,电脑常见故障以及解决方案都在这里
  15. Python入门:微博注销不了?python一键清空微博文章内容
  16. 关于使用Python——写模拟手机通讯录查询系统
  17. C++20 latch
  18. 华硕固件默认ip,不能进入路由的管理后台了?千万别慌张
  19. sql按不同纬度拆分时间以及相关时间函数整理
  20. vim 安装YouCompleteMe 插件

热门文章

  1. C#中使用OpenGL:(三)将.lib文件编译为.dll文件
  2. 学习Linux的第五课时
  3. VVC/H.266参考软件VTM算法描述 [译](一. CTU划分部分)
  4. 2023最新连锁店软件排名,国内十大连锁店管理软件新鲜出炉!
  5. 三菱PLC项目案例之手轮发脉冲控制三轴伺服电机
  6. 计算机考研考什么科目?求解
  7. Elastic-Job中Zookeeper的作用
  8. 四个视角,讲透额温枪应用设计中的运放问题
  9. STM32 Cube IDE HAL库驱动 W25Q128 进行读、写、擦除操作
  10. 如何安装pandas?