*STM32L053R8 单片机低功耗唤醒
最近在做项目需要用到低功耗唤醒,在这自己总结一下经验,顺便做个调试记录。
在主函数文件
main函数
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
```bash
在这里插入代码片
HAL_init()函数中注意引脚初始化 外部中断我用的是 PB12
GPIO_InitStruct.Pin = GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI2_3_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(EXTI2_3_IRQn);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI4_15_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);
``
在 stm32l0xx_hal_gpio.c系统头文件中添加自己的中断代码
unsigned int u;
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
// /* Prevent unused argument(s) compilation warning */
// UNUSED(GPIO_Pin);
if(GPIO_Pin==GPIO_PIN_12)
{
u++;
// printf("zhongduan ....");
NVIC_SystemReset(); // 复位
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
}
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
``
在 stm32l0xx_it.c 函数中 添加
/**
* @brief This function handles EXTI line 4 to 15 interrupts.
*/
void EXTI4_15_IRQHandler(void)
{
/* USER CODE BEGIN EXTI4_15_IRQn 0 */
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_12)==0)
{
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
}
}
```bash
在这里插入代码片
待机功耗在29-30 ua 功耗可以接受
唤醒后的功耗在3.8mA