下载了CubeU0的安装包.这个是给CubeMX准备的,但也可以解压出来。做研究用。
我看到了其中的一个例程,LPTime的。这个例程简单实用。我看了一下介绍大体如下:
在主程序中设置低功耗:
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
在初始化LPTime时定义了激活引脚:PC3(pin 37 in CN7 connector)
static void MX_LPTIM2_Init(void)
{
/* USER CODE BEGIN LPTIM2_Init 0 */
/* USER CODE END LPTIM2_Init 0 */
/* USER CODE BEGIN LPTIM2_Init 1 */
/* USER CODE END LPTIM2_Init 1 */
hlptim2.Instance = LPTIM2;
hlptim2.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC;
hlptim2.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1;
hlptim2.Init.Trigger.Source = LPTIM_TRIGSOURCE_0;
hlptim2.Init.Trigger.ActiveEdge = LPTIM_ACTIVEEDGE_RISING;
hlptim2.Init.Trigger.SampleTime = LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION;
hlptim2.Init.Period = 65535;
hlptim2.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE;
hlptim2.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL;
hlptim2.Init.Input1Source = LPTIM_INPUT1SOURCE_GPIO;
hlptim2.Init.RepetitionCounter = 0;
if (HAL_LPTIM_Init(&hlptim2) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN LPTIM2_Init 2 */
/* USER CODE END LPTIM2_Init 2 */
}
在中断函数中取反LED:
void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim)
{
uint32_t wait_loop_index = 0;
/* Timeout was reached, toggle LED4 */
BSP_LED_Toggle(LED4);
/* Delay of 100 ms to sallow observing the led toggling */
wait_loop_index = 100*(SystemCoreClock / 1000);
while (wait_loop_index != 0)
{
wait_loop_index--;
}
}
给出的激活条件也比较好玩,1HZ,就是用1HZ的信号去控制LPTime。
结果是当我用手去点两下引角时,就工作在LPTime状态。如果我不触发就要么亮要么灭工作在低功耗模式。
|