下载了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状态。如果我不触发就要么亮要么灭工作在低功耗模式。
|