Stm32 抢占和子优先级配置 | 学习笔记

简介: 快速学习 Stm32 抢占和子优先级配置

开发者学堂课程【嵌入式之 RFID 开发与应用2020版:Stm32 抢占和子优先级配置】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/665/detail/11155


Stm32 抢占和子优先级配置

内容介绍:

一、中断线 0 到 15

二、中断优先级

三、分配方式

 

一、中断线 0 到 15

上节课主要学习中断的外部中断线,包括中断符函数、中断的入口。对于外部中断来说,它提供七个入口,但中断线一共有 16 个,有些中断是复用的。

image.png

其实在这里都有中断线 0 到 15,包括这里的计算器,计算器不用了解。

 

二、中断优先级

接下来,看中断优先级,

image.png

中断对于官方来说,cortex- M 提供了 8 位来完成对各个中断的优先级配置,但STM32 只使用其中的四位,这也就意味着它最多可以编码出 16 种状态( 16 个优先级)。

注意:千万不要误以为 2 的四次方,而是从 0 到 15。

优先级分为抢占优先级和响应优先级。

抢占优先级很好理解,如果这四个比特位里用作抢占的就表示优先级是可打断的,优先级高可以打断优先级低的。

响应优先级又叫做子优先级或副优先级,主要是在当抢占优先级相同时,由响应优先级来决定谁先执行。

既要设置抢占优先级,又要设置响应优先级,抢占优先级和响应优先级总共四位。

STM32 提供五种分法,如果抢占优先级不占一位,四个比特位全部用于子优先级,普通型大概 60 个中断每一个都是同等级别的,它不具有嵌套的功能。也就是只有一个优先级。

子优先级不可打断,假设有 A、B 中断同时出发,一旦 A 执行,再有一个 C 中断处罚,C 的优先级就算是比A高也不能打断,要等待 A 执行完成才能去执行 C。

最后一种比较极端的情况,把四个比特位全部用作抢占优先级。也就意味着所有的中断响应级别处在同个级别,可以为不同的中断设置不同的抢占优先级,最多可以设置 16 级。比如 A 和 B 同时触发中断,A 优先级高先执行。此时 C 的优先级比 A 还要高,A 暂时被打断去执行 C。这就是所谓的抢占优先级。

一般情况,如果没有特别要求,可以设成各占两位的情况,各有四个级别(0到3)。抢占优先级可以设四级,响应优先级也可以设四个等级。

 

三、分配方式

大多数的情况下,其实并没有对系统进行配置,所以它会有一个默认值。通常是通过函数去配置,比如通过函数配置时,需要传递不同的( NVIC PriorityGroup_1 ),选择 Group0、1、2、3、4 里的哪个就决定了分配方式。

如果选择的是 Group1 决定抢占优先级占一位,可以签到两个优先级,而响应优先级占三位,可以设定八个响应优先级。如果你把它设成 0,那就没有抢占优先级,以此类推。

例如:

>WVIC PriorityGroupConfig(NVIC PriorityGroup_1)

抢占优先级占 1 位 (NVIC_IRQChannelPreemptionPriority)>可以设置两个抢占优先级,可嵌套两层

响应优先级占 3 位( NVIC IRQChannelSubPriority)>可以设置 8 个响应优先级

>NVIC PriorityGroupConfig NVIC PriorityGroup O 抢占优先级占 0 位

>可以设置 1 个抢占优先级,就是正在运行的这个>响应优先级占 4 位

>可以设置 16 个响应优先级,此时的中断就不可嵌套了

用前面的方法,接口在内核里,在库里面官方提供好。所以,如果要去使用接口可以搜索下。

实现的部分当然点 C 程序,把它设成五种情况,分哪一种它会告诉你,抢占优先级占 0 位,运行占 4 位,大概的分配情况。

image.png

在完成中断初始化之前,起初应该去调 NVIC_PriorityGroupConfig 函数,调完后,具体怎样去配置某个特定的中断的抢占优先级和子优先级,代码时看到底一个具体的路断怎样去配置抢占优先级和子优先级,抢占的原理就是这样。

相关文章
|
5月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
758 0
|
6月前
|
传感器
【经典案例】STM32F407使用HAL库配置I2C详解
STM32F407是一个强大的微控制器,广泛应用于嵌入式系统中。在许多应用中,我们需要使用I2C总线来与传感器、EEPROM、显示屏等外设进行通信。本文将详细介绍如何使用STM32 HAL库来配置和使用I2C接口。
767 2
|
6月前
|
开发者
【经典案例】使用HAL库配置STM32F407的SPI外设
在嵌入式系统开发中,STM32F407是一款广泛应用的微控制器,而SPI(Serial Peripheral Interface)是一种常用的通信接口。本文将详细介绍如何使用STM32的硬件抽象层(HAL)库配置STM32F407的SPI外设,并提供完整的代码示例。
621 1
|
5月前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
188 0
|
5月前
|
数据安全/隐私保护
STM32F103C8T6实现简易密码锁(CubeMax配置)(一),Oled显示。
项目功能:实现设置密码,登陆密码,后期还可以通过E2PROM实现掉电不丢失数据。通过Oled的显示去判断我们是否设置或者登陆成功。
106 0
|
6月前
|
移动开发
技术好文:stm32寄存器版学习笔记06输入捕获(ETR脉冲计数)
技术好文:stm32寄存器版学习笔记06输入捕获(ETR脉冲计数)
289 0
|
7月前
|
中间件 编译器 调度
STM32cubemx对FreeRTOS的适配(工程模板配置)
STM32cubemx对FreeRTOS的适配(工程模板配置)
400 0
|
6月前
|
芯片
【STM32】详解RTC实时时钟的概念和配置&示例代码
【STM32】详解RTC实时时钟的概念和配置&示例代码
|
7月前
STM32CubeMX配置时钟无法使用高速外部时钟HSE
STM32CubeMX配置时钟无法使用高速外部时钟HSE
294 0
|
7月前
|
存储 芯片
STM32 cubemx配置USART DMA传输
STM32 cubemx配置USART DMA传输
164 0