
目标实现:使用LPTIM1,在低功耗stop模式下定时1s,1s后将STM32从stop模式唤醒,并且点亮LED灯 1 LPTIM 介绍LPTIM,顾名思义,即低功耗定时器的意思,与普通定时器的差别是LPTIM在睡眠或者停机模式下依然可以工作(待机模式除外),支持低速时钟 LSI、 LSE 或者外部输入时钟。LPTIM是低功耗产品在低功耗功耗模式下定时的不二之选
![]() LPTIM 低功耗定时器有以下 6 种模式:
主要有以下三个使用场景,本文将介绍LPTIM超时唤醒的应用:
介绍下LPTIM初始化结构体各个参数的含义及配置 ![]()
需求:使用LPTIM1,在低功耗stop模式下定时1s,1s后将STM32从stop模式唤醒,并且点亮LED灯 3.1 LPTIM1时钟初始化
RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE; RCC_OscInitStruct.LSEState = RCC_LSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct)!= HAL_OK) { Error_Handler(__FILE__, __LINE__); } RCC_PeriphCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPTIM1; RCC_PeriphCLKInitStruct.Lptim1ClockSelection = RCC_LPTIM1CLKSOURCE_LSE; HAL_RCCEx_PeriphCLKConfig(&RCC_PeriphCLKInitStruct); 3.2 LPTIM1初始化
void MX_LPTIM1_Init(void) { hlptim1.Instance = LPTIM1; hlptim1.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC; //选择内部时钟源 hlptim1.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV64; //设置LPTIM时钟分频 hlptim1.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE; //设置软件触发 hlptim1.Init.Trigger.ActiveEdge = LPTIM_ACTIVEEDGE_RISING; //设置上升沿触发 hlptim1.Init.Trigger.SampleTime = LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION; //设置时钟干扰滤波器 hlptim1.Init.OutputPolarity = LPTIM_OUTPUTPOLARITY_HIGH; //设置输出高电平 hlptim1.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE; //比较寄存器和ARR自动重载寄存器选择更改后立即更新 hlptim1.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL; //LPTIM计数器对内部时钟源计数 hlptim1.Init.Input1Source = LPTIM_INPUT1SOURCE_GPIO; //外部输入1,本配置未使用 hlptim1.Init.Input2Source = LPTIM_INPUT2SOURCE_GPIO; //外部输入2,本配置未使用 if (HAL_LPTIM_Init(&hlptim1) != HAL_OK) { while (1) { Error_Handler(__FILE__, __LINE__); } } }
{ if(hlptim->Instance==LPTIM1) { /* Peripheral clock enable */ __HAL_RCC_LPTIM1_CLK_ENABLE(); /* Peripheral interrupt init */ HAL_NVIC_SetPriority(LPTIM1_IRQn, 0, 0); HAL_NVIC_EnableIRQ(LPTIM1_IRQn); } } 3.3 中断函数
{ HAL_LPTIM_IRQHandler(&hlptim1); } void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim) { /* Timeout was reached, turn on LED */ BSP_LED_On(); } 3.4 开启定时器
#define PULSE 32767 HAL_LPTIM_TimeOut_Start_IT(&hlptim1, PERIOD, PULSE); HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
|