本帖最后由 聪聪哥哥 于 2025-2-26 09:40 编辑
分享一下STM32L562的中断学习过程:
一:STM32中断知识的如下所示:
扩展中断和事件控制器(EXTI)通过可配置和直接的事件输入管理单个CPU和系统唤醒。它向电源控制提供唤醒请求,并向CPUNVIC生成中断请求,向CPU事件输入生成事件。对于CPU,需要额外的事件生成块(EVG)来生成CPU事件信号。
EXTI唤醒请求允许从停止模式唤醒系统。
中断请求和事件请求生成也可以在RUN模式下使用。EXTI还包括EXTlmuxlOport选择。
EXTl的主要功能如下:
支持43个输入事件
所有事件输入都可以唤醒系统。
外围设备中没有相关唤醒标志的事件在EXTI中有一个标志,并从EXTI对CPU产生中断。
异步事件输入分为2组:
可配置事件(来自I/0或外部设备的信号,能够产生脉冲)
可配置事件具有以下功能:可选择的活动触发边缘中断待决状态寄存器位,独立于上升和下降边缘。单独的中断和事件生成掩码,用于调节CPU的唤醒、中断和事件产生。
SW触发可能性
直接事件(来自具有相关标志的外设的中断和唤醒源,该标志需要在外围设备中清除)
直接事件具有以下特点固定上升边活动触发器(中断待命的状态标志由生成事件的外围设备提供。)EXTI中没有中断待命状态寄存位。
个人中断和事件生成掩码,用于调节CPU唤醒和事件生成。
没有 SW 触发可能性
TrustZone安全事件
-对安全输入事件的控制和配置位的访问可以变得安全。
EXTIIO端口选择
二:查看开发板的原理图
可以看到开发板板载了一个 用户按键,使用一阶RC滤波对输入信号进行滤波。
STM32 cube MX 软件配置如下所示:
系统时钟树配置:
三:软件代码如下所示:
3.1 中断配置部分
static void EXTI13_IRQHandler_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable GPIOC clock */
__HAL_RCC_GPIOC_CLK_ENABLE();
/* Configure PC.13 pin as input floating */
GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStructure.Pull = GPIO_NOPULL;
GPIO_InitStructure.Pin = BUTTON_USER_PIN;
HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
/* Enable and set line 13 Interrupt to the lowest priority */
HAL_NVIC_SetPriority(EXTI13_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(EXTI13_IRQn);
}
3.2 中断处理部分:
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin == GPIO_PIN_13)
{
BSP_LED_Toggle(LED10);
}
}
四:实物效果如下:
中断的应用场景:
按钮/开关控制:当用户按下按钮或切换开关时,可以触发外部中断来响应用户的操作,例如控制LED的亮灭或执行特定功能。这种中断类型常用于用户界面交互,如按键控制设备启动、停止或切换模式。
传感器触发:当传感器检测到特定事件或条件发生时(如温度达到阈值、光线强度变化等),可以触发外部中断来及时处理传感器数据。这种中断类型在环境监测、工业自动化等领域有广泛应用。
|