STM32L0冻结设置NVIC / GPIO

时间:2019-03-14 18:54:05

标签: arm stm32 cortex-m mbed

我正在使用运行MbedOS 5.11.2的STM32L073RZ CPU。最终,我的目标是使它在低功耗模式(STOP模式)下工作,该模式将被RTC中断或引脚PA_0({{1} }。目前,我只是尝试使用STM32 WAKEUP_PIN_1 API将PA_0设置为中断。请在下面查看我的代码:

HAL

如您所见,该代码分为两部分:GPIO设置和NVIC设置。我的问题如下:

如果我在NVIC设置之前执行GPIO设置,则该程序似乎挂在#include "mbed.h" #define LOG(...) pc.printf(__VA_ARGS__); pc.printf("\r\n"); DigitalOut led(LED1); Serial pc(USBTX, USBRX); void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { led = !led; } int main() { pc.baud(9600); led = 1; // GPIO SETUP LOG("Enabling GPIO port A clock"); __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; GPIO_InitStruct.Pull = GPIO_NOPULL; LOG("Initialising PA_0"); HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // NVIC SETUP LOG("Setting IRQ Priority"); HAL_NVIC_SetPriority(EXTI0_1_IRQn, 0, 1); // Priorities can be 0, 1, 2, 3 with lowest being highest prio LOG("Enabling IRQ"); HAL_NVIC_EnableIRQ(EXTI0_1_IRQn); LOG("Going into STOP mode"); HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFE); } 上,但是,如果我在GPIO设置之前执行NVIC设置,则该代码似乎挂在HAL_NVIC_SetPriority()上。

我完全不知道是什么原因造成的。非常感谢任何见解。

1 个答案:

答案 0 :(得分:2)

您不需要手动执行此操作。只要您在无跳动模式下运行Mbed OS(在mbed_app.json中设置MBED_TICKLESS=1宏),只要所有线程空闲,MCU都会自动进入停止模式。如果您想唤醒,可以在大头针上使用InterruptIn或使用LowPowerTicker

如果您正在寻找绝对最低的功耗模式,则可以使用待机功能(不保留RAM),这里有一个库:stm32-standby-rtc-wakeup