STM32之中断详解

STM32之中断详解

NVIC & EXTI

什么是中断:打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续运行,就叫中断

NVIC:嵌套中断控制器,是中断仲裁中心,管理全部中断源。

EXTI:处理中断和时间控制器,属于芯片级外设,只管芯片引脚或特定外设事件的边沿检测

GPIO外部中断流程图

中断向量表

简介:定义一块固定的内存,以4字节对齐,存放各个中断服务函数程序的首地址

中断向量表定义在启动文件 ,当发生中断,CPU会自动执行对应的中断服务函数

NVIC工作原理

中断优先级

  1. 抢占优先级:高抢占优先级可以打断正在执行的低抢占优先级中断
  2. 响应优先级:当抢占优先级相同时,响应优先级高的先执行,但是不能互相打断
  3. 自然优先级:中断向量表的优先级

抢占和响应都相同的情况下,自然优先级越高的,

先执行 数值越小,表示优先级越高

NVIC的使用

中断和事件的区别

中断:要进入NVIC,有相应的中断服务函数,需要CPU处理

事件:不进入NVIC,仅用于内部硬件自动控制的,如:TIM、DMA、ADC

EXTI主要特性

EXTI和IO映射关系

AFIO简介

复用功能IO,主要用于重映射和外部中断映射配置

EXTI和IO的对应关系

中断应用实战

如何使用中断

EXTI的配置步骤

HAL库的EXTI外部中断的设置功能整合到HAL_GPIO_Init()函数中

  1. 使能中断对应GPIO口的时钟
  2. 设置GPIO工作模式 (上/下拉,浮空输入),触发条件 (上升/下降沿触发,IMR、 RTSR/FTSR
    ),开启AFIO时钟 (设置AFIO/SYSCFG时钟开启寄存器),设置IO与中断线的映射关系(选择PA~PK到底哪组IO对应EXTI输入线,AFIO_EXTICR/ SYSCFG_EXTICR)
  3. 配置中断优先级(NVIC),并使能中断;中断优先级我们使用HAL_NVIC_SetPriority 函数设置,中断使能我们使用 HAL_NVIC_EnableIRQ 函数设置。
  4. 编写中断服务函数:每开启一个中断,就必须编写对应的中断服务函数,否则将会导致死机(CPU将找不到中断服务函数)。中断服务函数接口厂家已经在 startup_stm32f103xe.s 中做好了,STM32F1 的 IO口外部中断函数只有 7 个,分别是:
c 复制代码
void EXTI0_IRQHandler();
void EXTI1_IRQHandler();
void EXTI2_IRQHandler();
void EXTI3_IRQHandler();
void EXTI4_IRQHandler();
void EXTI9_5_IRQHandler();
void EXTI15_10_IRQHandler();

一般情况下,我们可以把中断控制逻辑直接编写在中断服务函数中,但是 HAL 库把中断处理过程进行了简单封装,请看步骤 5 讲解。

  1. 编写中断处理回调函数HAL_GPIO_EXTI_Callback。我们可以在 HAL_GPIO_EXTI_Callback 里面实现控制逻辑编写,

HAL库中断回调处理机制介绍

相关推荐
崇山峻岭之间1 分钟前
单片机DMA实验
单片机·嵌入式硬件
wandertp13 分钟前
对信号处理及滤波器的理解---基于robomaster机器人嵌入式控制系统
arm开发·stm32·算法·信号处理
.千余20 分钟前
【Linux】 TCP进阶详解:字节流、粘包问题、异常情况与UDP完整对比2
linux·运维·c语言·开发语言·经验分享·笔记·php
XMAIPC_Robot27 分钟前
基于RK3588 ARM+FPGA电火花数控机床控制系统设计,兼顾ethercat软硬件实时
linux·arm开发·人工智能·嵌入式硬件·fpga开发
QiLinkOS40 分钟前
QiLink 技术委员会选举实施细则
c语言·数据结构·c++·单片机·嵌入式硬件·算法·开源
QiLinkOS1 小时前
发明人与专利价值共生逻辑
c语言·数据结构·c++·人工智能·单片机·嵌入式硬件·算法
Sakuyu434681 小时前
STM32中断
stm32·单片机·嵌入式硬件
嵌入式小站1 小时前
STM32 零基础可移植教程 13:输入捕获入门,怎么测一个方波频率
stm32·单片机·嵌入式硬件
agathakuan1 小时前
從零開始在家開發 IoT: Flash & Run 腳本解析(STM32 + WiFi HaLow)
stm32·mcu·iot
草莓熊Lotso2 小时前
【CMake】静态库的编译、链接与引用全解析
linux·c语言·数据库·c++·软件工程·cmake