我需要实现的功能:干电池提供
电源持续使用5年以上。外部接口只有3个,2个GPIO和1个USART。2个GPIO用于外部中断,USART用于和上位机
通信。项目使用
STM32CubeMX生成代码,模板选择的LL,干电池电压为3V,容量为1000mAh。STM32L010K8T6上电初始化,重要代码如下:
- LL_PWR_EnterLowPowerRunMode();
- LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE3);
初始化完成立即进入STOP模式,代码如下:
- uart2_prepare_stop();
- //LL_mDelay(1000);
- PWR->CR = ~PWR_CR_PDDS;
- PWR->CR |= PWR_CR_CWUF;
- LL_mDelay(1);
- SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
- __wfi();
- LL_USART_DisableInStopMode(USART2);
函数uart2_prepare_stop代码如下:
- LL_USART_EnableIT_RXNE(USART2);
- LL_USART_EnableClockInStopMode(USART2);
- LL_USART_EnableIT_WKUP(USART2);
- LL_USART_EnableInStopMode(USART2);
串口初始化代码如下:
- USART_InitStruct.BaudRate = 9600;
- USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
- USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
- USART_InitStruct.Parity = LL_USART_PARITY_NONE;
- USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;
- USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
- USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
- LL_USART_Init(USART2, USART_InitStruct);
- LL_USART_ConfigAsyncMode(USART2);
- LL_USART_SetWKUPType(USART2, LL_USART_WAKEUP_ON_RXNE);
- LL_USART_Enable(USART2);
- uart2_prepare_stop();
测试结果,2个外部中断可正常唤醒,USART2无法唤醒。上述代码都是根据手册说明打开唤醒相关的设置。
请问上述代码是存在寄存器设置错误?如何让USART2在产生RXNE中断信号时唤醒MCU?谢谢!