STM32F1 中断管理

背景

  1. STM32中每个中断都可以独立设置抢占优先级响应优先级
  2. 优先设置的级数值越小,优先级越高
  3. 中断优先级控制的寄存器组,在mdk中的定义是bit IP[240],而F103有60个中断,这意味着每个中断只能使用4bit来表示自己的抢占优先级和响应优先级
  4. 灵活考虑,可以通过软件配置来设定4bit中,几个bit表示抢占优先级,几个bit表示响应优先级。

中断分组

中断分组,按我的理解就是中断寄存器控制位的分配方式,一共有0~4,五种:

  • 组0,0位用于抢占优先级,4位用于响应优先级
  • 组1,1位用于抢占优先级,3位用于响应优先级
  • 组2,2位用于抢占优先级,2位用于响应优先级
  • 组3,3位用于抢占优先级,1位用于响应优先级
  • 组4,4位用于抢占优先级,0位用于响应优先级

何为抢占优先级和响应优先级

抢占,是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断(在执行中断
服务函数A的过程中被抢占优先级更高的中断B打断,执行完中断服务函数B 再继续执行中断服务函数A),而响应属性则应用在抢占属性相同的情况下,当两个中断向量的抢占优先级相同时,如果两个中断同时到达, 则先处理响应优先级高的中断。

使用HAL库函数来配置中断分组

调用void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)即可。
其中PriorityGroup必须是NVIC_PRIORITYGROUP_x,x可以是0~4

对每个中断定义其抢占优先级和响应优先级

// 参数依次是:中断号,抢占优先级,响应优先级
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority);
// 可以用于使能/失能中断
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn);
void HAL_NVIC_DisableIRQ(IRQn_Type IRQn);

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一,外部中断简介 1.1 CM4 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,...
    三文五略阅读 9,161评论 0 0
  • 姓名:周崇杰 学号:16140120059 专业:机械设计制造及其自动化 转载自:http://blog.csd...
    CJbaby阅读 14,236评论 0 7
  • 1.STM32中断概述 中断优先级 在使用中断式按键之前,我们先去了解一下STM32的中断。关于这方面可以参考《S...
    东方未曦阅读 8,814评论 1 10
  • 首先让我们来看一下关于控制定时器中断的文件timer.c中的源码: 前两行是头文件的声明,这里我们不去理会,我们今...
    Jane_123阅读 13,916评论 0 5
  • 1 异常类型 Cortex-M3内核具有强大的异常响应系统,它把能够打断当前代码执行流程的事件分为异常(excep...
    hackvilin阅读 9,006评论 0 4

友情链接更多精彩内容