board.c 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. * Copyright (c) 2006-2018, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2024-3-19 RuiXuan Zhang first version
  9. */
  10. #include "board.h"
  11. /**
  12. * @brief System Clock Configuration
  13. * @retval None
  14. */
  15. void SystemClock_Config(void) {
  16. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  17. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  18. /** Configure the main internal regulator output voltage
  19. */
  20. if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK) {
  21. Error_Handler();
  22. }
  23. /** Configure LSE Drive Capability
  24. */
  25. HAL_PWR_EnableBkUpAccess();
  26. __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
  27. /** Initializes the RCC Oscillators according to the specified parameters
  28. * in the RCC_OscInitTypeDef structure.
  29. */
  30. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_LSE;
  31. RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  32. RCC_OscInitStruct.LSEState = RCC_LSE_ON;
  33. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  34. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  35. RCC_OscInitStruct.PLL.PLLM = 1;
  36. RCC_OscInitStruct.PLL.PLLN = 20;
  37. RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
  38. RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
  39. RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
  40. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
  41. Error_Handler();
  42. }
  43. /** Initializes the CPU, AHB and APB buses clocks
  44. */
  45. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
  46. | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
  47. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  48. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  49. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  50. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  51. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK) {
  52. Error_Handler();
  53. }
  54. }
  55. /**
  56. * @brief Peripherals Common Clock Configuration
  57. * @retval None
  58. */
  59. void PeriphCommonClock_Config(void) {
  60. RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
  61. /** Initializes the peripherals clock
  62. */
  63. PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_SDMMC1 | RCC_PERIPHCLK_ADC;
  64. PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_PLLSAI1;
  65. PeriphClkInit.Sdmmc1ClockSelection = RCC_SDMMC1CLKSOURCE_PLLSAI1;
  66. PeriphClkInit.PLLSAI1.PLLSAI1Source = RCC_PLLSOURCE_HSE;
  67. PeriphClkInit.PLLSAI1.PLLSAI1M = 1;
  68. PeriphClkInit.PLLSAI1.PLLSAI1N = 8;
  69. PeriphClkInit.PLLSAI1.PLLSAI1P = RCC_PLLP_DIV7;
  70. PeriphClkInit.PLLSAI1.PLLSAI1Q = RCC_PLLQ_DIV2;
  71. PeriphClkInit.PLLSAI1.PLLSAI1R = RCC_PLLR_DIV2;
  72. PeriphClkInit.PLLSAI1.PLLSAI1ClockOut = RCC_PLLSAI1_48M2CLK | RCC_PLLSAI1_ADC1CLK;
  73. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) {
  74. Error_Handler();
  75. }
  76. }