STM32L--Interrupts and events

本文介绍了STM32L系列微控制器的中断和事件管理机制,包括NVIC控制器的功能、外部中断/事件控制器(EXTI)的工作原理及其配置方法,以及如何通过外部和内部事件唤醒内核。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STM32L-Interrupts and events


1.  NVIC控制器

  • 45个可屏蔽中断源(medium density devices);53个可屏蔽中断源(medium+ density devices);56个可屏蔽中断源(high density devices)。以上均不包含Cortex-M3 16个中断
  • 16个可编程中断优先级(4个中断优先级已被占用)
  • 低延迟异常和中断控制
  • 功耗控制
  • 实现系统控制寄存器
NVIC与处理器内核相辅相成,包括了低延迟中断处理机制和对于高延迟的中断有着高效的处理机制

所有的中断,包括内核的中断均由NVIC管理

中断向量表如下(medium-density devices):

 

  
 


2. 外部中断/事件控制器(EXTI)

外部中断/事件控制器含有多达了23个边缘检测器用于产生事件/中断请求。每一个均可单独配置其检测类型(事件/中断)和触发事件(上升缘、下降缘或上升及下降缘),并且每一个均可单独屏蔽,pending寄存器保存着当前中断状态
有以下主要特性:
  • 每个中断/事件都有单独的触发器和屏蔽器
  • 每个中断源有专用的状态位
  • 23个软件事件/中断请求
  • 检测的外部信号的脉冲宽度可低于APB2总线时钟
其框架图如下:




3. 唤醒事件管理

STM32L15XX可以通过外部事件或者内部事件来唤醒内核(WFE),唤醒事件可由以下之一产生:
  • 在外设控制寄存器中使能一个中断(在NVIC中不使能该中断),使能Cortex-M3系统控制寄存器中的SEVONPEND位。当MCU被WFE唤醒时,外设中断状态位和外设NVIC IRQ状态位(使用NVIC 中断状态清除寄存器)需要清除。
  • 配置一个外部或者内部EXTI为事件模式,当MCU被WFE唤醒时,由于事件行中的状态位没有置位,所以不需要清除外设中断状态位和外设NVIC IRQ状态位

4. 功能描述

为了产生中断,中断必需被配置和使能,可以通过配置两个触发器寄存器为所需要的类型和使能中断请求(往相应的中断屏蔽寄存器中写入1)。当所配置的检测事件发生时,会产生中断请求。相应的状态位会被置位,通过往状态寄存器中写1可以清除该中断事件。

为了产生事件,事件必需被配置和使能,可以通过配置两个触发器寄存器为所需要的类型和使能事件请求(往相应的事件屏蔽寄存器中写入1)。当所配置的检测事件发生时,会产生事件请求。相应的状态位不会被置位

中断/事件请求均可通过软件产生,只需要往软件中断/事件寄存器中写入1即可。

(1)硬件中断
可按照以下步骤配置中断源
  • 配置屏蔽寄存器(EXTI_IMR)
  • 为中断配置触发器寄存器(EXTI_RTSR、EXTI_FTSR)
  • 配置控制NVIC IRQ映射到外部中断控制器上的使能位和屏蔽位
(2)硬件事件
可按照以下步骤配置事件源
  • 配置屏蔽寄存器(EXTI_EMR)
  • 为事件配置触发器寄存器(EXTI_RTSR、EXTI_FTSR)
(3)软件触发中断/事件
可按照以下步骤产生一个软件中断
  • 配置屏蔽寄存器(EXTI_IMR和EXTI_EMR)
  • 设置对应的软件中断寄存器的请求位(EXTI_SWIRE)
5. 外部中断/事件的映射关系

83个GPIO连接到了16个外部中断/事件上,可见下图



另外EXTI 映射情况如下:
  • EXTI 16 连接到 PVD 输出
  • EXTI 17 连接到 RTC Alarm event
  • EXTI 18 连接到 USB Device FS wakeup event
  • EXTI 19 连接到 RTC Tamper 和 TimeStamp events
  • EXTI 20 连接到 RTC Wakeup event
  • EXTI 21 连接到 Comparator 1 wakeup event
  • EXTI 22 连接到 Comparator 2 wakeup event
  • EXTI 23 连接到 Comparator channel acquisition interrupt


### STM32L051 Low Power Modes Configuration and Usage STM32L051 microcontrollers feature several low-power modes designed to optimize energy consumption while maintaining necessary functionality. These include **Sleep**, **Stop**, and **Standby** modes. #### Sleep Mode In this mode, the CPU is halted but peripherals continue operating normally. The system can be woken up by any interrupt or event[^2]. This allows for minimal power reduction with fast wake-up times suitable when some processing needs occur periodically without fully shutting down all components. #### Stop Mode This deeper sleep state stops both the high-speed oscillator (HSI/HSE) used as a clock source for most of the device's functions except those configured before entering stop mode such as RTC powered from LSI/LSE. Wakeup sources are limited compared to Sleep; only specific events like EXTI lines connected through I/O pins or internal watchdog timers will trigger an exit from Stop back into Run operation. #### Standby Mode The deepest level of shutdown where almost everything inside gets turned off including RAM contents unless preserved via backup registers supplied directly off VBAT supply voltage rail separate from main VDD line powering rest of chip during normal operations. Exiting requires pressing reset button or detecting activity on dedicated WKUP pin(s). For configuring these states effectively: - Use `PWR_EnterSLEEPMode()` function call specifying whether WFI instruction should execute immediately after request. - For stopping, configure clocks appropriately then invoke `HAL_PWR_EnterSTOPMode()`. - Entering standby involves calling `HAL_PWR_EnterSTANDBYMode()` which does not return since it triggers full hardware reset upon wakeup automatically. Additionally, ensure that relevant GPIO configurations support desired interrupts/events intended to serve as valid wake conditions especially if relying on external stimuli rather than purely software-based mechanisms alone. ```c // Example code snippet demonstrating how to enter different low power modes void EnterLowPowerModes(void){ /* Prepare here */ // To enter SLEEP mode using WFI HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON | PWR_SLEEPENTRY_WFI); // Or STOP mode preparation followed by entry command __HAL_RCC_PWR_CLK_ENABLE(); HAL_PWREx_EnableUltraLowPower(); // Optional ultra-low power settings HAL_SuspendTick(); // Disable tick increment to save more power HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); // Code resumes execution once exited due to interrupt/event... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值