01. ARM Cortex-M - (04).STM32F4X7 中断

一、概念 & 设计

1、中断概述

处理器的中断:
	CPU 在正常执行程序但遇到紧急事件时,暂时中止当前程序的执行,转而去为处理紧急的事件。
	待处理完毕后再返回被打断的程序处继续往下执行。
退出中断:
	中断前的现场被自动从堆栈中恢复。一旦出栈完成,继续执行被中断打断的指令。
	出栈的过程也可被打断,使得随时可以响应新的中断, 而不再进行现场保存。中断也可能嵌套。

其他:待独立成新章节。
参考:https://blog.csdn.net/k666499436/article/details/124181471?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170549276616800182134643%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170549276616800182134643&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-124181471-null-null.142^v99^pc_search_result_base2&utm_term=NVIC&spm=1018.2226.3001.4187

2、STM32F4 中断体系

系统定时器、CSS时钟安全系统、...
	内核中断 ↓
NVIC 嵌套向量中断控制器 ---> CORTEX-M4 内核指令执行单元 <---> 中断向量表
	外设中断 ↑
串口、定时器、IIC、EXTI(GPIO 等)、...
--------------------
Cortex-M4 内核支持 256 个中断:16 个内核中断和 240 个外部中断,具有256 级的可编程中断优先级设置。
	每一个外部中断都可以被使能或者禁止,并且可以被设置为挂起状态或者清除状态。
STM32F4 并没有使用 Cortex-M4 内核的全部东西,而是只用了它的一部分。
--------------------
中断处理程序中,__weak 修饰的回调函数需要用户自己实现。一般用于业务逻辑的处理。
外部中断线可能会复用中断入口。必要时需要在中断处理程序中读取 GPIO 电平来判断。
keil5 -> {}functions:需要编译完成才能使用 hal 库。

3、嵌套中断

1、STM32F4中断的优先级:优先级越小优先级越高。见(异常向量表)
	3个固定的优先级,都是负值,不能改变 
	16个可编程优先级,用4个bit位表示 

2、中断抢占:
	抢占优先级 > 响应优先级。数值越小,优先级越高。
	抢占优先级不同的中断,高优先级可以打断正在进行的低优先级的中断。
	抢占优先级相同的中断,高优先级的响应优先级中断不可以打断低响应优先级的中断。
	抢占优先级和响应优先级都一样,则优先处理编号较小的中断。

3、中断的优先级分组:工程开发中应当首先确定中断优先级分组,之后就不要再做修改了。
	STM32F4 将中断分为 5 个组,每个组有不同的分配情况(抢占优先级+响应优先级)。
	抢占优先级在前,响应优先级在后。各占几个位要根据 SCB->AIRCR 中的 bit8 ~ bit10 决定。
	--------------------
	cubeMX 中可以图形化配置 NVIC 并使能。
	不建议在应用中将抢占优先级过高(0),否则可能导致系统中断被抢占造成卡死等情况。

4、SCB->AIRCR 优先级设置规则:
	组		bit10 ~ bit8			bit7 ~ bit4			  			结果
	0			111						0/4					0位抢占优先级,4位响应优先级
	1			110						1/3					1位抢占优先级,3位响应优先级
	2			101						2/2					2位抢占优先级,2位响应优先级
	3			100						3/1					3位抢占优先级,1位响应优先级
	4			011						4/0					4位抢占优先级,0位响应优先级

4、嵌套向量中断控制器 (NVIC)

包括内核异常在内的所有中断均通过 NVIC 进行管理
STM32F405xx/07xx 和 STM32F415xx/17xx 具有 82 个可屏蔽中断通道
STM32F42xxx 和 STM32F43xxx 具有 86 个可屏蔽中断通道(不包括 Cortex™-M4F 的 16 根中断线)
16 个可编程优先级(4 位中断优先级)
低延迟异常和中断处理
电源管理控制
系统控制寄存器的实现
NVIC 和处理器内核接口紧密配合,可处理低延迟中断、晚到中断。
----------
SysTick 校准值寄存器:设置为 18.75 MHz(HCLK/8,HCLK 设为150 MHz),会产生 1 ms 时间基准。
----------
NVIC 寄存器
在这里插入图片描述

5、SCB 寄存器

SCB 表示系统控制块。其中还包含一些中断控制相关寄存器。在这里插入图片描述

6-1、外部中断控制器 (EXTI)、系统配置控制器 (SYSCFG)

外部中断控制器(EXTI):下图左
	包含多达 23 个用于产生事件/中断请求的边沿检测器。控制外部 GPIO 的中断。
	EXTI 0~15 总共 16 路:
		IO口外部中断在中断向量表中只分配了7个中断向量,只能使用7个中断服务函数
		EXTI 0~4 每个中断线分配一个中断向量。
		外部中断线5~9分配一个中断向量,共用一个服务函数。
		外部中断线10~15分配一个中断向量,共用一个中断服务函数。
		剩余的高编号 EXTI 17+ 的功能是架构固定的。
	每根输入线可单独配置:
		EXTI 0 可配置为 PA0 ~ PI0。
		功能可配置为中断或事件,事件可配置触发类型:上升/下降/边沿 触发。脉冲能触发 ADC/定时器 等。
		每根输入线还可单独屏蔽。挂起寄存器用于保持中断请求的状态线。

系统配置控制器(SYSCFG):下图右
	重映射存储器到代码起始区域。
	管理连接到 GPIO 口的外部中断。
	管理系统的可靠性特性。
	---------------------------------------
	在中断控制中,外部中断配置寄存器(SYSCFG_EXTICR 1~4)负责配置 EXTI 对应具体哪个管脚。
	每个外部中断配置寄存器只使用 0~15 bit,4 位一组。由小到大共对应 16 个 EXTI。
		SYSCFG_EXTICR 1:0~3 bit 对应 EXTI 0;4~7 bit 对应 EXTI 1;... ...
		每 4bit 组成的数字,从小到大(0~15)代表:PA[X] ~ PI[X]

6-2、EXTI、SYSCFG 图示

在这里插入图片描述

6-3、EXTI 寄存器(暂略)

在这里插入图片描述

7、异常向量表

在这里插入图片描述


二、配置

1、cubeMX 配置:configuration -> system -> nvic

在这里插入图片描述

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值