stm32中断系统
中断介绍
相关概念百度或查找其它资料
中断源
中断屏蔽
中断处理过程(响应中断、执行中断服务函数、中断返回)
中断优先级(抢占优先级、子优先级)
中断嵌套
中断系统
嵌套向量中断控制器NVIC
中断优先级
【优先级分组】
Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下:
第0组:所有4位用于指定响应优先级,此时不会发生中断嵌套
第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
第4组:所有4位用于指定抢占式优先级
可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()
选择使用哪种优先级分组方式,这个函数的参数有下列5种:
NVIC_PriorityGroup_0 //选择第0组
NVIC_PriorityGroup_1 // 选择第1组
NVIC_PriorityGroup_2 // 选择第2组
NVIC_PriorityGroup_3 // 选择第3组
NVIC_PriorityGroup_4 // 选择第4组
中断服务函数
中断服务函数通常以PPP_IRQHandler
命名,PPP是对应外设名
【中断设置过程】
- 建立中断向量表(必须在用户程序执行前完成,通常在启动过程中完成可以在Flash、RAM中建立中断向量表)
- 在Flash建立(默认情况下):无需重定位中断向量表,即每个中断对应的中断服务函数不能被修改
- 在RAM中建立:需要重定向中断向量表,在用户程序运行过程,可根据需要动态修改中断服务程序
- 分配栈空间并初始化
- 设置中断优先级
- 分组
- 抢占优先级、子优先级
- 使能中断
- 编写中断服务函数
外部中断/事件控制器EXTI
【原理框图】
【外部中断输入线】
-
一共16个中断输入线
EXTI0~EXTI15
-
每个输入线都可以源于
PA~PG
共7个端口(同一时刻只能启用其中一个端口,比如对于EXTI0,用了PA0作为外部输入,就不能用PB0或者PC0、PD0……)
【原理实现】
-
外部信号通过输入线(GPIO端口)进入EXTIx
-
信号经过边沿检测电路,可以选择上升沿或下降沿触发,或者2种触发都选择
-
然后经过或门,一路输出到NVIC控制器(用于产生中断),一路经过脉冲发生器输出一个脉冲;在这个过程中信号可以被屏蔽。用于产生中断的信号称为“中断”,用于产生脉冲的信号被称为“事件”
EXTI_InitTypeDef 定义于文件“stm32f10x_exti.h”:
typedef struct
{
u32 EXTI_Line;
EXTIMode_TypeDef EXTI_Mode;
EXTIrigger_TypeDef EXTI_Trigger;
FunctionalState EXTI_LineCmd;
} EXTI_InitTypeDef;
本文来自博客园,作者:aJream,转载请记得标明出处:https://www.cnblogs.com/ajream/articles/16079881.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人