stm32中的中断优先级

        在工作中使用到多个定时器中断,由于中断的中断优先级不熟悉导致出错,下面来写一下中断的一些注意事项。

一、中断的分类

1、EXTI外部中断:由外部设备或外部信号引发,例如按键按下、外部传感器信号变化等。外部中断用于响应外部事件,并及时处理相关任务。

2、内部中断:由处理器内部的模块或事件引发,例如定时器溢出、串口接收缓冲区非空等。内部中断可以用于定期执行特定任务、检测状态变化等。。

二、中断的优先级分组

        STM32 将中断分为 5 个组,组 0~4。该分组的设置是由内核外设 SCB 的应用程序中断及复位控制寄存器 AIRCR 的 PRIGROUP[10:8]bit10~8 位决定。

例如组设置为 3,那么此时所有中断,每个中断的中断优先寄存器的高四位中的最高 3 位是抢占优先级,低 1 位是响应优先级。

  • 每个中断,你可以设置抢占优先级为 0~7,响应优先级为 1 或 0。
  • 抢占优先级的级别高于响应优先级。
  • 数值越小所代表的优先级就越高。

优先级原则

  • 第一,如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;
  • 第二,高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。

判断优先级:分组>主优先级>

子优先级.如果都相同,则看硬件中断编号(中断向量表)。

使用stm32cubemx可以直接设置中断的组数和优先级。

注意:

1、为什么中断处理程序尽可能简洁而且执行时间尽可能短

        因为中断处理程序在运行的时候,会阻止其抢占优先级更低的中断的执行或者相同抢占优先级但是响应优先级更低或者相等的中断执行。

        当执行完定时器中断处理程序后,定时器才会再次计时。

2、无论是抢占优先级(主优先级)还是响应优先级(子优先级),优先级数值越小,就代表优先级越高。

3、优先级较高的中断可以打断优先级较低的中断。

4、抢占优先级相同且响应优先级相同的中断,假如同时发生,会按照硬件内部固定的优先级执行。

5、中断优先级的分组对内核和外设同样适用。当比较的时候,只需要把内核外设的中断优先级的四个位按照外设的中断优先级来分组来解析即可,即人为的分出抢占优先级和子优先级。

三、S

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32,串口中断优先级是通过设置NVIC(Nested Vectored Interrupt Controller)的优先级寄存器来实现的。STM32系列微控制器的NVIC具有分组优先级和子优先级两个级别。 首先,要设置分组优先级。分组优先级决定了中断优先级分组方式,可以设置为0-4,其0表示没有分组。分组优先级位数越多,可设置的中断等级就越多,但子优先级的位数就越少。你可以根据你的需求选择适当的分组优先级。 其次,设置子优先级。子优先级决定了同一组中断优先级顺序。子优先级的个数由分组优先级决定,例如,当分组优先级为2时,每个组有2个子优先级。 在代码,你可以使用如下函数来设置串口中断优先级: ```c NVIC_InitTypeDef NVIC_InitStructure; // 设置分组优先级 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_X); // 配置串口中断 NVIC_InitStructure.NVIC_IRQChannel = USARTx_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = PreemptionPriority; NVIC_InitStructure.NVIC_IRQChannelSubPriority = SubPriority; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); ``` 其,`USARTx_IRQn` 是串口对应的中断通道,`PreemptionPriority` 是抢占优先级,`SubPriority` 是子优先级。你可以根据你的需求设置不同的优先级等级。 请注意,在设置中断优先级时,抢占优先级越低,中断优先级越高。同一组的中断,子优先级越低,优先级越高。 希望这个回答对你有帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值