board.c 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. /*
  2. * Copyright (c) 2006-2022, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2021-08-27 Jiao first version
  9. */
  10. #include "board.h"
  11. FL_ErrorStatus FL_UART_GPIO_Init(UART_Type *UARTx)
  12. {
  13. FL_ErrorStatus status = FL_FAIL;
  14. FL_GPIO_InitTypeDef GPIO_InitStruct;
  15. if (UARTx == UART0)
  16. {
  17. GPIO_InitStruct.pin = FL_GPIO_PIN_13;
  18. GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
  19. GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  20. GPIO_InitStruct.pull = FL_DISABLE;
  21. GPIO_InitStruct.remapPin = FL_DISABLE;
  22. status = FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  23. GPIO_InitStruct.pin = FL_GPIO_PIN_14;
  24. GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
  25. GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  26. GPIO_InitStruct.pull = FL_DISABLE;
  27. GPIO_InitStruct.remapPin = FL_DISABLE;
  28. status = FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  29. }
  30. else if (UARTx == UART1)
  31. {
  32. GPIO_InitStruct.pin = FL_GPIO_PIN_13;
  33. GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
  34. GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  35. GPIO_InitStruct.pull = FL_DISABLE;
  36. GPIO_InitStruct.remapPin = FL_DISABLE;
  37. status = FL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  38. GPIO_InitStruct.pin = FL_GPIO_PIN_14;
  39. GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
  40. GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  41. GPIO_InitStruct.pull = FL_DISABLE;
  42. GPIO_InitStruct.remapPin = FL_DISABLE;
  43. status = FL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  44. }
  45. else if (UARTx == UART4)
  46. {
  47. GPIO_InitStruct.pin = FL_GPIO_PIN_0;
  48. GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
  49. GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  50. GPIO_InitStruct.pull = FL_DISABLE;
  51. GPIO_InitStruct.remapPin = FL_DISABLE;
  52. status = FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  53. GPIO_InitStruct.pin = FL_GPIO_PIN_1;
  54. GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
  55. GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  56. GPIO_InitStruct.pull = FL_DISABLE;
  57. GPIO_InitStruct.remapPin = FL_DISABLE;
  58. status = FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  59. }
  60. return status;
  61. }
  62. FL_ErrorStatus FL_SPI_GPIO_Init(SPI_Type *SPIx)
  63. {
  64. FL_ErrorStatus status = FL_FAIL;
  65. FL_GPIO_InitTypeDef GPIO_InitStruct;
  66. if (SPIx == SPI1)
  67. {
  68. GPIO_InitStruct.pin = FL_GPIO_PIN_11 | FL_GPIO_PIN_10 | FL_GPIO_PIN_9;
  69. GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
  70. GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  71. GPIO_InitStruct.pull = FL_DISABLE;
  72. GPIO_InitStruct.remapPin = FL_DISABLE;
  73. status=FL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  74. }
  75. else if (SPIx == SPI2)
  76. {
  77. GPIO_InitStruct.pin = FL_GPIO_PIN_8 | FL_GPIO_PIN_10 | FL_GPIO_PIN_9;
  78. GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
  79. GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  80. GPIO_InitStruct.pull = FL_DISABLE;
  81. GPIO_InitStruct.remapPin = FL_DISABLE;
  82. status=FL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  83. }
  84. return status;
  85. }
  86. static void RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLL_R, uint32_t PLL_DB, uint32_t PLL_O)
  87. {
  88. MODIFY_REG(RCC->PLLCR, RCC_PLLCR_DB_Msk | RCC_PLLCR_REFPRSC_Msk | RCC_PLLCR_OSEL_Msk | RCC_PLLCR_INSEL_Msk,
  89. (PLL_DB << RCC_PLLCR_DB_Pos) | PLL_R | PLL_O | Source);
  90. }
  91. static void RCHFInit(uint32_t clock)
  92. {
  93. switch (clock)
  94. {
  95. case FL_RCC_RCHF_FREQUENCY_8MHZ:
  96. FL_RCC_RCHF_WriteTrimValue(RCHF8M_TRIM);
  97. break;
  98. case FL_RCC_RCHF_FREQUENCY_16MHZ:
  99. FL_RCC_RCHF_WriteTrimValue(RCHF16M_TRIM);
  100. break;
  101. case FL_RCC_RCHF_FREQUENCY_24MHZ:
  102. FL_RCC_RCHF_WriteTrimValue(RCHF24M_TRIM);
  103. break;
  104. default:
  105. FL_RCC_RCHF_WriteTrimValue(RCHF8M_TRIM);
  106. break;
  107. }
  108. FL_RCC_RCHF_SetFrequency(clock);
  109. }
  110. void SelRCHFToPLL(uint32_t rchf, uint32_t clock)
  111. {
  112. uint32_t div = FL_RCC_PLL_PSC_DIV8;
  113. if (clock > 64)
  114. {
  115. return;
  116. }
  117. RCHFInit(rchf);
  118. switch (rchf)
  119. {
  120. case FL_RCC_RCHF_FREQUENCY_16MHZ:
  121. div = FL_RCC_PLL_PSC_DIV16;
  122. break;
  123. case FL_RCC_RCHF_FREQUENCY_24MHZ:
  124. div = FL_RCC_PLL_PSC_DIV24;
  125. break;
  126. default:
  127. break;
  128. }
  129. if (clock <= 24)
  130. {
  131. FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_0CYCLE);
  132. }
  133. else
  134. {
  135. if ((clock > 24) && (clock <= 48))
  136. {
  137. FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_1CYCLE);
  138. }
  139. else
  140. {
  141. FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_1CYCLE);
  142. }
  143. }
  144. RCC_PLL_ConfigDomain_SYS(FL_RCC_PLL_CLK_SOURCE_RCHF, div, clock, FL_RCC_PLL_OUTPUT_X1);
  145. FL_RCC_PLL_Enable();
  146. while (FL_RCC_IsActiveFlag_PLLReady() != FL_SET);
  147. FL_RCC_SetAHBPrescaler(FL_RCC_AHBCLK_PSC_DIV1);
  148. FL_RCC_SetAPB1Prescaler(FL_RCC_APB1CLK_PSC_DIV1);
  149. FL_RCC_SetAPB2Prescaler(FL_RCC_APB2CLK_PSC_DIV1);
  150. FL_RCC_SetSystemClockSource(FL_RCC_SYSTEM_CLK_SOURCE_PLL);
  151. }