首页 > 编程知识 正文

(STM32学习笔记--中断系统)

时间:2023-05-05 10:57:45 阅读:122022 作者:1625

目录(一、STM32中断系统二、NVIC中断管理三、中断配置

一. STM32中断系统

中断概念

中断是CPU对系统中发生的事件的反应。

引起中断的事件称为中断源。

中断源向CPU请求处理称为中断请求。

发生中断时程序中断的暂停点称为断点。

CPU暂停当前程序并对中断请求进行响应的过程称为中断响应。

处理中断源的程序称为中断处理程序。

CPU运行相关的中断处理程序称为中断处理,返回断点的过程称为中断返回。STM32中断系统

CM3内核支持256个中断,其中包括16个内核中断和240个外部中断,有256级可编程中断设置。

STM32并不是使用CM3内核的所有东西,只使用了其中的一部分。

STM32的各外围设备发生中断。 共有84个中断,包括16个核心中断和68个可屏蔽中断,具有16级可编程中断优先级。

STM32F103系列上面只有60个可断开的中断,107系列只有68个。

二、NVIC中断管理中断管理方法:

首先,对STM32中断进行分组,对0~4进行分组。 此外,针对每个中断设置抢占优先级和响应时间优先级的值。抢占 响应:

STM32的中断向量有两个属性:抢占属性和响应属性,属性号越小表示优先级越高。

抢占:指中断其他中断的属性。 此属性出现在嵌套中断中。 (在中断服务函数a执行过程中,以高优先权中断b中断,在中断服务函数b执行完成后继续执行中断服务函数a。

抢占属性由nvic _ irqchannelpreemptionpriority参数组成。

响应属性:如果抢占属性相同,两个中断向量的抢占优先级相同,或者如果两个中断同时到达,则会先处理具有高响应优先级的中断。

响应属性由NVIC_IRQChannelSubPriority参数组成。

三、中断配置中断设置分为两个步骤。

系统运行后,先设置中断优先级分组。 调用函数:

voidnvic _ prioritygroupconfig (uint 32 _ TN vic _ priority group; 中断组在系统运行过程中只设置一次。

每次中断后,设置对应的抢占优先级和响应优先级:

voidnvic _ init (nvic _ init typedef * nvic _ init struct );中断优先级分组函数:

voidnvic _ prioritygroupconfig (uint 32 _ TN vic _ priority group ) assert _ param (is _ nvic _ priority _ group ) }例如:

nvic _优先级组配置(nvic _优先级组_ 2; 一般来说,在执行系统代码期间,通常设置中断优先级组,例如组2,且在设置组之后不改变组。 随意更改组会导致中断管理混乱,导致程序出现意外的执行结果。中断优先级设置:

中断参数初始化函数

voidnvic _ init (nvic _ init typedef * nvic _ init struct ); typedef struct { uint8_ TN vic _ IRQ channel; //中断通道uint8_ TN vic _ irqchannelpreemptionpriority设置; //抢占优先级设置uint8_ TN vic _ irqchannelsubpriority; //设置响应优先级functionalstatenvic _ irqchannelcmd; //有效/无效} NVIC_InitTypeDef; 例如:

nvic _ inittypedefnvic _ init structure; nvic _ init structure.nvic _ IRQ channel=usar t1 _ irqn; //串行端口1中断nvic _ init structure.nvic _ irqchannelpreemptionpriority=1; //抢占优先级为1 nvic _ init structure.nvic _ irqchannelsubpriority=2; //子优先级2n vic _ init structure.nvic _ irqchannelcmd=enable; //IRQ信道使能nvic _ init (nvic _ init结构); //根据上面指定的参数初始化NVIC寄存器中断参考: stm32学习笔记-中断系统

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