Эх сурвалжийг харах

Настройка тактирования битами

Vladimir N. Shilov 9 жил өмнө
parent
commit
29bcb109d1
1 өөрчлөгдсөн 39 нэмэгдсэн , 0 устгасан
  1. 39 0
      stm32/rcc.c

+ 39 - 0
stm32/rcc.c

@@ -0,0 +1,39 @@
+/**
+  * Òàêòèðîâàíèå STM32
+  * http://avr-start.ru/?p=3709
+  */
+
+/* Äëÿ âíåøíåãî êâàðöà: */
+
+  RCC->CR|=RCC_CR_HSEON; //Çàïóñêàåì ãåíåðàòîð HSE.
+  while (!(RCC->CR & RCC_CR_HSERDY)) {}; // Æäåì ãîòîâíîñòè
+  RCC->CFGR &=~RCC_CFGR_SW; //Ñáðàñûâàåì áèòû
+  RCC->CFGR |= RCC_CFGR_SW_HSE; // Ïåðåõîäèì íà HSE
+
+
+/* Äëÿ âíóòðåííåãî PLL */
+
+  RCC->CFGR |= RCC_CFGR_PLLMULL6;               //HSI / 2 * 6 = 24 MHz
+  RCC->CR |= RCC_CR_PLLON;                      //enable PLL
+  while((RCC->CR & RCC_CR_PLLRDY) == 0) {}      //wait till PLL is ready
+  RCC->CFGR &= ~RCC_CFGR_SW;                    //clear SW bits
+  RCC->CFGR |= RCC_CFGR_SW_PLL;                 //select PLL as system clock
+  while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_1) {} //wait till PLL is used
+
+
+/* Äëÿ âíåøíåãî PLL */
+
+  RCC->CR |= RCC_CR_HSEON;                      //enable HSE
+  while((RCC->CR & RCC_CR_HSERDY) == 0) {}      //wait till HSE is ready
+  RCC->CFGR |= RCC_CFGR_HPRE_DIV1  |            //HCLK = SYSCLK
+               RCC_CFGR_PPRE2_DIV1 |            //PCLK2 = HCLK
+               RCC_CFGR_PPRE1_DIV1;             //PCLK1 = HCLK
+  RCC->CFGR &= ~RCC_CFGR_PLLMULL;               //clear PLLMULL bits
+  RCC->CFGR |= RCC_CFGR_PLLSRC_PREDIV1 |        //PLL source = PREDIV1
+               RCC_CFGR_PLLXTPRE_PREDIV1_Div2 | //HSE / 2 = 4 MHz
+               RCC_CFGR_PLLMULL6;               //4 * 6 = 24 MHz
+  RCC->CR |= RCC_CR_PLLON;                      //enable PLL
+  while((RCC->CR & RCC_CR_PLLRDY) == 0) {}      //wait till PLL is ready
+  RCC->CFGR &= ~RCC_CFGR_SW;                    //clear SW bits
+  RCC->CFGR |= RCC_CFGR_SW_PLL;                 //select PLL as system clock
+  while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_1) {} //wait till PLL is used