STM32的待机与按键(闹钟)唤醒试验

  因为要节能,这个星期折腾待机与唤醒,首先是待机与按键的唤醒,下载和看了N多网上的资料,千转百回,还是官方资料靠谱,参考着做成功了,即待机后按键唤醒(闹钟也可以)。

int main(void)
{
		HAL_Init();
		SystemClock_Config();
		MX_GPIO_Init();
		MX_DMA_Init();
		MX_ADC_Init();
		MX_LPUART1_UART_Init();
		MX_USART1_UART_Init();
		MX_RTC_Init();
		HAL_RTC_MspInit(&hrtc);
		GetCurrentDateTime();//得到当前的时间和日期
		ITMP=(uint8_t)CurrentTime.Minutes+1;//设置为当前的下一分钟唤醒																		
		RTC_Set_AlarmA(CurrentTime.Hours,ITMP,0);//重新设置闹钟
		printf("CurrentTime :%02d:%02d:%02d\r\n",CurrentTime.Hours, CurrentTime.Minutes,CurrentTime.Seconds); //显示时分秒
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0, GPIO_PIN_RESET);HAL_Delay(100);//亮
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0, GPIO_PIN_SET);HAL_Delay(100);//灭
		WakeUp_Init();
		while (1)
		{
			LED0_0;HAL_Delay (100);  //GPIOB-0 15亮
			LED1_0;HAL_Delay (100);  //GPIOB-1 15亮
			LED0_1;HAL_Delay (100);  //GPIOB-0 15灭
			LED1_1;HAL_Delay (100);  //GPIOB-1 15灭
		}
}

void WakeUp_Init(void)
{
		SystemPower_Config();
		if(__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET)
		{
			__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
		}	
		HAL_Delay(3000);		
		HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);				
		__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);				
		HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);				
		HAL_PWR_EnterSTANDBYMode();
}

程序刷机后,启动后3秒进入待机状态,按下PA0对应的键系统再次启动,3秒后再次进入待机。

因为上面已经初始化了闹钟,那么加上响应闹钟的回调函数,系统也会在到达闹钟指定时间自动启动,然后再待机。

//回调函数
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
    EXTI0_1_IRQHandler();
}

 

你可能感兴趣的:(VC++/C++/C,STM32)