首页 > 编程知识 正文

stm32优先级0最高,单片机复位后p0到p3的内容是多少

时间:2023-05-04 00:09:40 阅读:41237 作者:901

系列文章目录文章目录系列文章目录前言一、STM32 NVIC中断优先级管理二、STM32中断组

在开始使用中断之前,请了解中断的优先级管理。

CM3内核支持256个中断,包括16个内核中断和240个外部中断,有256个中断

的可编程中断设置。 但是,STM32并不使用CM3内核中的所有内容,只使用了其中的一部分。

STM32有84个中断,包括16个核心中断和68个可屏蔽中断,具有16级可编程中断优先级。

我们经常使用的是这68个可屏蔽中断,而STM32的68个可屏蔽中断在STM32F103系列中

上面又只有60个。 在107系列中只有68个。 因为我们的开发板选择的芯片是STM32F103系列

因此,我只介绍STM32F103系列的60个可屏蔽中断。

另一方面,STM32 NVIC中断优先级在MDK中被管理,并且是与NVIC相关联的寄存器。 MDK为此定义了以下结构体。

类型结构

{

__IO uint32_t ISER[8]; //! Interrupt集启用注册器/

uint 32 _ t保留0 [ 24 ];

__IO uint32_t ICER[8]; //! Interrupt Clear Enable Register /

uint32_t RSERVED1[24];

__IO uint32_t ISPR[8]; //! Interrupt Set Pending Register /

uint 32 _ t保留2 [ 24 ];

__IO uint32_t ICPR[8]; //! Interrupt Clear Pending Register /

uint 32 _ t保留3 [ 24 ];

__IO uint32_t IABR[8]; //! Interrupt活动位注册器/

uint 32 _ t保留4 [ 56 ];

__IO uint8_t IP[240]; //! Interrupt优先级注册器,8Bit wide /

uint 32 _ t保留5 [ 644 ];

__O uint32_t STIR; //! oftwaretriggerinterruptregister * /

} NVIC_Type;

3358 www.Sina.com/http://www.Sina.com /要启用某个中断,必须将相应的ISER位设置为1并启用该中断。 根据中断数据包、掩码、IO端口映射等的设定进行设定。 3358 www.Sina.com/http://www.Sina.com /用于清除中断的使能。 3358 www.Sina.com/http://www.Sina.com /通过设置1,可以挂起正在运行的中断,并执行相同级别以上的中断。 写0是无效的。 3358 www.Sina.com/http://www.Sina.com /可以通过设置1挂起挂起的中断。 写0是无效的。 3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com /由240个8位寄存器组成,用于中断这四位分为抢占优先级和子优先级。 抢占优先级在前,子优先级在后。 这两个优先级分别为多少位取决于SCB-AIRCR中中断组的设置。

二、STM32的中断包STM32将中断分为5组,组0~4。 该组的设置在SCB-AIRCR寄存器的bit10~8中定义。

对于每个中断,可以将抢占优先级设置为0到7,将响应优先级设置为1或0。 抢占优先级级别高于响应优先级。 数值越小,优先顺序越高。

这里有两点需要注意。 第一,如果两个中断的抢占优先级和响应优先级相同,则首先看到哪个中断首先发生,然后再执行。 第二,高优先权可以中断正在进行的低优先权中断。 抢占优先级相同的中断时,高优先级响应优先级不能中断低响应优先级的中断。

ISER[8]:

voidnvic _ prioritygroupconfig (uint 32 _ TN vic _ priority group;

此函数的作用是对中断的优先级进行分组。 此函数在系统中只调用一次,并被分成两部分

小组确定后最好不要更改。

voidnvic _ prioritygroupconfig (uint 32 _ TN vic _ priority group )

{

资产_ param (is _ nvic _ priority _ group ) NVIC_prioritygroup );

sc B- air Cr=air Cr _ vect key _ mask|nvic _ priority group;

}

# define is _ nvic _ priority _ group (group )。

() )组==NVIC_PriorityGroup_0) |

(GROUP )==NVIC_PriorityGroup_1) |

(GROUP )==NVIC_PriorityGroup_2) |

(GROUP )==NVIC_PriorityGroup_3) |

(GROUP )==NVIC_PriorityGroup_4) )

分组范围为0-4

中断使能寄存器组

voidnvic _ init (nvic _ init typedef * nvic _ init struct ) )。

NVIC_InitTypeDef是一个结构

类型结构

{

uint8_t NVIC_IRQChannel;

uint8_ TN vic _ irqchannelpreemptionpriority;

uint8_ TN vic _ irqchannelsubpriority;

functionalstatenvic _ irqchannelcmd;

} NVIC_InitTypeDef;

在NVIC_InitTypeDef结构的中间有三个成员变量。 这三个成员变量的作用如下:

NVIC_IRQChannel :定义要初始化哪个中断。 这可以在stm32f10x.h中找到与每个中断对应的名称。

例如USART1_IRQn。

nvic _ irqchannelpreemptionpriority :定义此中断的抢占级别。

NVIC_IRQChannelSubPriority :定义此中断的子优先级级别。

NVIC_IRQChannelCmd :中断是否有效。

ICER[8]:

在系统开始运行时设置中断组。 决定组号,即决定抢占优先顺序和子优先顺序

分配位数。 调用函数为NVIC_PriorityGroupConfig (; 设置要使用的中断的中断优先级。 每次中断调用函数的是NVIC_Init (;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。