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.

103 lines
3.1 KiB

  1. /*
  2. * @Author: sunlight 2524828700@qq.com
  3. * @Date: 2024-09-13 21:25:41
  4. * @LastEditors: sunlight 2524828700@qq.com
  5. * @LastEditTime: 2024-09-19 14:02:17
  6. * @FilePath: \auxiliary_addition\Usr\power\pwr.c
  7. * @Description: Ĭ,`customMade`, koroFileHeader : https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  8. */
  9. #include "pwr.h"
  10. #include "stm32f4xx_hal.h"
  11. #include "zgpio.h"
  12. /**
  13. * @description:ֹͣģʽָHSEʱ
  14. * @return {*}
  15. */
  16. static void SystemConfig_Recover(void) {
  17. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  18. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  19. /** Configure the main internal regulator output voltage
  20. */
  21. __HAL_RCC_PWR_CLK_ENABLE();
  22. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  23. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  24. RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  25. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  26. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  27. RCC_OscInitStruct.PLL.PLLM = 4;
  28. RCC_OscInitStruct.PLL.PLLN = 72;
  29. RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  30. RCC_OscInitStruct.PLL.PLLQ = 4;
  31. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
  32. Error_Handler();
  33. }
  34. /** Initializes the CPU, AHB and APB buses clocks
  35. */
  36. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
  37. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  38. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  39. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  40. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
  41. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) {
  42. Error_Handler();
  43. }
  44. }
  45. /**
  46. * @description: SleepMode Enter and Wakeup
  47. * @return {*}
  48. */
  49. void Power_SleepMode(void) {
  50. HAL_SuspendTick(); // ��ͣ�δ�ʱ�ӣ���ֹͨ���δ�ʱ���жϻ���
  51. // printf("enter sleep");
  52. DebugLight_OFF;
  53. HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFE); // ��������˯��ģʽ���жϻ���
  54. // printf("enter sleep");
  55. HAL_ResumeTick(); // �����Ѻ󣬻ָ��δ�ʱ��
  56. DebugLight_ON;
  57. }
  58. /**
  59. * @description: StopMode Enter and Wakeup
  60. * @return {*}
  61. */
  62. void Power_StopMode(void) {
  63. #if FLASH_PowerDown
  64. HAL_PWREx_EnableFlashPowerDown(); // ������һ�����͹���
  65. #else
  66. HAL_PWREx_DisableFlashPowerDown(); // ��������
  67. #endif
  68. DebugLight_OFF;
  69. HAL_SuspendTick(); // ��ͣʱ��
  70. HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); // ����ֹͣģʽ���жϻ���
  71. SystemConfig_Recover(); // �ָ�HESʱ�Ӻ�PLL����
  72. HAL_ResumeTick(); // �ָ�ʱ��
  73. DebugLight_ON;
  74. }
  75. /**
  76. * @description: StandbyMode Enter and Wakeup
  77. * @return {*}
  78. */
  79. void Power_StandByMode(void) {
  80. // ���⸴λ��Դ
  81. if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB)) {
  82. __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB); // ������λ��־
  83. }
  84. __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); // ����WU��־
  85. #if WKUP
  86. HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1); // ʹ��WKUP���Ż���
  87. #endif
  88. DebugLight_OFF;
  89. HAL_PWR_EnterSTANDBYMode(); // ��������ģʽ
  90. }
  91. void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc) {}