You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*
* @Author: sunlight 2524828700@qq.com * @Date: 2024-09-13 21:25:41 * @LastEditors: sunlight 2524828700@qq.com * @LastEditTime: 2024-09-19 14:02:17 * @FilePath: \auxiliary_addition\Usr\power\pwr.c * @Description: ����Ĭ������,������`customMade`, ����koroFileHeader�鿴���� ��������: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
#include "pwr.h"
#include "stm32f4xx_hal.h"
#include "zgpio.h"
/**
* @description:ֹͣģʽ�ָ�����HSEʱ�� * @return {*} */ static void SystemConfig_Recover(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Configure the main internal regulator output voltage
*/ __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 4; RCC_OscInitStruct.PLL.PLLN = 72; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 4; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); }
/** Initializes the CPU, AHB and APB buses clocks
*/ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } }
/**
* @description: SleepMode Enter and Wakeup * @return {*} */ void Power_SleepMode(void) { HAL_SuspendTick(); // ��ͣ�δ�ʱ�ӣ���ֹͨ���δ�ʱ���жϻ���
// printf("enter sleep");
DebugLight_OFF; HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFE); // ��������˯��ģʽ���жϻ���
// printf("enter sleep");
HAL_ResumeTick(); // �����Ѻָ��δ�ʱ��
DebugLight_ON; }
/**
* @description: StopMode Enter and Wakeup * @return {*} */ void Power_StopMode(void) { #if FLASH_PowerDown
HAL_PWREx_EnableFlashPowerDown(); // ������һ��������
#else
HAL_PWREx_DisableFlashPowerDown(); // ��������
#endif
DebugLight_OFF; HAL_SuspendTick(); // ��ͣʱ��
HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); // ����ֹͣģʽ���жϻ���
SystemConfig_Recover(); // �ָ�HESʱ�Ӻ�PLL����
HAL_ResumeTick(); // �ָ�ʱ��
DebugLight_ON; }
/**
* @description: StandbyMode Enter and Wakeup * @return {*} */ void Power_StandByMode(void) { // ���⸴λ��Դ
if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB)) { __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB); // ������λ��־
}
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); // ����WU��־
#if WKUP
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1); // ʹ��WKUP���Ż���
#endif
DebugLight_OFF; HAL_PWR_EnterSTANDBYMode(); // ��������ģʽ
}
void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc) {}
|