STM32-M3系统中断默认启用状态及Cube MX配置位置咨询
STM32-M3系统中断相关问题解答
一、寄存器级无库编程的系统中断启用说明
- RESET、NMI、Hard Fault属于核心不可屏蔽/默认启用的中断,硬件上电即生效,无需额外配置;
- Mem Manage、Bus Fault、Usage Fault这类可配置系统中断,硬件默认是禁用状态(对应SCB->SHCSR寄存器初始值为0x00000000,相关使能位未置1)。如果需要使用这类中断的故障检测功能,必须手动通过寄存器配置启用。
二、Cube MX默认勾选却无显式初始化代码的原因
Cube MX默认勾选这些中断的使能位,但生成代码中看不到NVIC/SCB的直接初始化代码,原因如下:
- 这类系统中断的使能并非通过NVIC配置,而是由SCB(系统控制块)的SHCSR寄存器控制;
- 若你仅勾选使能但未自定义中断优先级、未编写对应中断服务函数,Cube MX不会生成显式的寄存器配置代码;但当你开启中断并添加服务函数后,Cube MX会在
SystemInit()函数或stm32fxxx_hal_msp.c(依具体型号)中添加对SCB->SHCSR的配置逻辑; - 部分HAL库的底层初始化流程中,会自动读取Cube MX的配置参数完成SCB寄存器的设置,你可以在
stm32xxxx_hal.c的初始化代码中追踪相关操作。
三、寄存器级初始化示例(无库编程)
直接操作SCB寄存器即可启用这类系统中断:
// 同时启用Mem Manage、Bus Fault、Usage Fault中断 SCB->SHCSR |= (SCB_SHCSR_MEMFAULTENA_Msk | SCB_SHCSR_BUSFAULTENA_Msk | SCB_SHCSR_USGFAULTENA_Msk);
注:这类系统中断的优先级有硬件限制,不可随意设置过低,如需调整优先级,需操作NVIC的IP寄存器。
内容的提问来源于stack exchange,提问作者Hossein Man
相关产品推荐
相关产品推荐

