board.c 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2018-11-06 SummerGift first version
  9. * 2019-04-09 WillianChan add stm32f469-st-disco bsp
  10. * 2020-06-20 thread-liu add stm32mp157-dk1 bsp
  11. */
  12. #include "board.h"
  13. /**
  14. * @brief System Clock Configuration
  15. * @retval None
  16. */
  17. void SystemClock_Config(void)
  18. {
  19. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  20. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  21. /**Configure LSE Drive Capability
  22. */
  23. HAL_PWR_EnableBkUpAccess();
  24. __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_MEDIUMHIGH);
  25. /**Initializes the CPU, AHB and APB busses clocks
  26. */
  27. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI
  28. |RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE
  29. |RCC_OSCILLATORTYPE_CSI;
  30. RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS_DIG;
  31. RCC_OscInitStruct.LSEState = RCC_LSE_ON;
  32. RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  33. RCC_OscInitStruct.HSICalibrationValue = 0x0; /* Default reset value */
  34. RCC_OscInitStruct.HSIDivValue = RCC_HSI_DIV1;
  35. RCC_OscInitStruct.LSIState = RCC_LSI_ON;
  36. RCC_OscInitStruct.CSIState = RCC_CSI_ON;
  37. RCC_OscInitStruct.CSICalibrationValue = 0x10; /* Default reset value */
  38. /**PLL1 Config
  39. */
  40. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  41. RCC_OscInitStruct.PLL.PLLSource = RCC_PLL12SOURCE_HSE;
  42. RCC_OscInitStruct.PLL.PLLM = 3;
  43. RCC_OscInitStruct.PLL.PLLN = 81;
  44. RCC_OscInitStruct.PLL.PLLP = 1;
  45. RCC_OscInitStruct.PLL.PLLQ = 1;
  46. RCC_OscInitStruct.PLL.PLLR = 1;
  47. RCC_OscInitStruct.PLL.PLLFRACV = 0x800;
  48. RCC_OscInitStruct.PLL.PLLMODE = RCC_PLL_FRACTIONAL;
  49. RCC_OscInitStruct.PLL.RPDFN_DIS = RCC_RPDFN_DIS_DISABLED;
  50. RCC_OscInitStruct.PLL.TPDFN_DIS = RCC_TPDFN_DIS_DISABLED;
  51. /**PLL2 Config
  52. */
  53. RCC_OscInitStruct.PLL2.PLLState = RCC_PLL_ON;
  54. RCC_OscInitStruct.PLL2.PLLSource = RCC_PLL12SOURCE_HSE;
  55. RCC_OscInitStruct.PLL2.PLLM = 3;
  56. RCC_OscInitStruct.PLL2.PLLN = 66;
  57. RCC_OscInitStruct.PLL2.PLLP = 2;
  58. RCC_OscInitStruct.PLL2.PLLQ = 1;
  59. RCC_OscInitStruct.PLL2.PLLR = 1;
  60. RCC_OscInitStruct.PLL2.PLLFRACV = 0x1400;
  61. RCC_OscInitStruct.PLL2.PLLMODE = RCC_PLL_FRACTIONAL;
  62. RCC_OscInitStruct.PLL2.RPDFN_DIS = RCC_RPDFN_DIS_DISABLED;
  63. RCC_OscInitStruct.PLL2.TPDFN_DIS = RCC_TPDFN_DIS_DISABLED;
  64. /**PLL3 Config
  65. */
  66. RCC_OscInitStruct.PLL3.PLLState = RCC_PLL_ON;
  67. RCC_OscInitStruct.PLL3.PLLSource = RCC_PLL3SOURCE_HSE;
  68. RCC_OscInitStruct.PLL3.PLLM = 2;
  69. RCC_OscInitStruct.PLL3.PLLN = 34;
  70. RCC_OscInitStruct.PLL3.PLLP = 2;
  71. RCC_OscInitStruct.PLL3.PLLQ = 17;
  72. RCC_OscInitStruct.PLL3.PLLR = 37;
  73. RCC_OscInitStruct.PLL3.PLLRGE = RCC_PLL3IFRANGE_1;
  74. RCC_OscInitStruct.PLL3.PLLFRACV = 0x1A04;
  75. RCC_OscInitStruct.PLL3.PLLMODE = RCC_PLL_FRACTIONAL;
  76. RCC_OscInitStruct.PLL3.RPDFN_DIS = RCC_RPDFN_DIS_DISABLED;
  77. RCC_OscInitStruct.PLL3.TPDFN_DIS = RCC_TPDFN_DIS_DISABLED;
  78. /**PLL4 Config
  79. */
  80. RCC_OscInitStruct.PLL4.PLLState = RCC_PLL_ON;
  81. RCC_OscInitStruct.PLL4.PLLSource = RCC_PLL4SOURCE_HSE;
  82. RCC_OscInitStruct.PLL4.PLLM = 4;
  83. RCC_OscInitStruct.PLL4.PLLN = 99;
  84. RCC_OscInitStruct.PLL4.PLLP = 6;
  85. RCC_OscInitStruct.PLL4.PLLQ = 8;
  86. RCC_OscInitStruct.PLL4.PLLR = 8;
  87. RCC_OscInitStruct.PLL4.PLLRGE = RCC_PLL4IFRANGE_0;
  88. RCC_OscInitStruct.PLL4.PLLFRACV = 0;
  89. RCC_OscInitStruct.PLL4.PLLMODE = RCC_PLL_INTEGER;
  90. RCC_OscInitStruct.PLL4.RPDFN_DIS = RCC_RPDFN_DIS_DISABLED;
  91. RCC_OscInitStruct.PLL4.TPDFN_DIS = RCC_TPDFN_DIS_DISABLED;
  92. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  93. {
  94. Error_Handler();
  95. }
  96. /**RCC Clock Config
  97. */
  98. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_ACLK
  99. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
  100. |RCC_CLOCKTYPE_PCLK3|RCC_CLOCKTYPE_PCLK4
  101. |RCC_CLOCKTYPE_PCLK5|RCC_CLOCKTYPE_MPU;
  102. RCC_ClkInitStruct.MPUInit.MPU_Clock = RCC_MPUSOURCE_PLL1;
  103. RCC_ClkInitStruct.MPUInit.MPU_Div = RCC_MPU_DIV2;
  104. RCC_ClkInitStruct.AXISSInit.AXI_Clock = RCC_AXISSOURCE_PLL2;
  105. RCC_ClkInitStruct.AXISSInit.AXI_Div = RCC_AXI_DIV1;
  106. RCC_ClkInitStruct.MCUInit.MCU_Clock = RCC_MCUSSOURCE_PLL3;
  107. RCC_ClkInitStruct.MCUInit.MCU_Div = RCC_MCU_DIV1;
  108. RCC_ClkInitStruct.APB4_Div = RCC_APB4_DIV2;
  109. RCC_ClkInitStruct.APB5_Div = RCC_APB5_DIV4;
  110. RCC_ClkInitStruct.APB1_Div = RCC_APB1_DIV2;
  111. RCC_ClkInitStruct.APB2_Div = RCC_APB2_DIV2;
  112. RCC_ClkInitStruct.APB3_Div = RCC_APB3_DIV2;
  113. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct) != HAL_OK)
  114. {
  115. Error_Handler();
  116. }
  117. /**Set the HSE division factor for RTC clock
  118. */
  119. __HAL_RCC_RTC_HSEDIV(24);
  120. }
  121. /**
  122. * @brief Peripherals Common Clock Configuration
  123. * @retval None
  124. */
  125. void PeriphCommonClock_Config(void) {
  126. RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
  127. /** Initializes the common periph clock
  128. */
  129. PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_CKPER;
  130. PeriphClkInit.CkperClockSelection = RCC_CKPERCLKSOURCE_HSE;
  131. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) {
  132. Error_Handler();
  133. }
  134. }
  135. extern void rt_hw_systick_init(void);
  136. extern int rt_hw_usart_init(void);
  137. void rt_hw_board_init()
  138. {
  139. /* HAL_Init() function is called at the beginning of the program */
  140. HAL_Init();
  141. /* enable interrupt */
  142. __set_PRIMASK(0);
  143. /* Configure the system clock */
  144. if (IS_ENGINEERING_BOOT_MODE()) {
  145. /* Configure the system clock */
  146. SystemClock_Config();
  147. }
  148. /* disable interrupt */
  149. __set_PRIMASK(1);
  150. rt_hw_systick_init();
  151. /* Heap initialization */
  152. #if defined(RT_USING_HEAP)
  153. rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END);
  154. #endif
  155. /* Pin driver initialization is open by default */
  156. #ifdef RT_USING_PIN
  157. rt_hw_pin_init();
  158. #endif
  159. /* USART driver initialization is open by default */
  160. #ifdef RT_USING_SERIAL
  161. rt_hw_usart_init();
  162. #endif
  163. /* Set the shell console output device */
  164. #if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE)
  165. rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
  166. #endif
  167. /* Board underlying hardware initialization */
  168. #ifdef RT_USING_COMPONENTS_INIT
  169. rt_components_board_init();
  170. #endif
  171. }