Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void rcc_clock_setup_in_hse_25mhz_out_50mhz(void)
- {
- /* Enable internal high-speed oscillator. */
- rcc_osc_on(HSI);
- rcc_wait_for_osc_ready(HSI);
- /* Select HSI as SYSCLK source. */
- rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSICLK);
- /* Enable external high-speed oscillator 25MHz. */
- rcc_osc_on(HSE);
- rcc_wait_for_osc_ready(HSE);
- rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_HSECLK);
- /*
- * Set prescalers for AHB, ADC, ABP1, ABP2.
- * Do this before touching the PLL (TODO: why?).
- */
- rcc_set_hpre(RCC_CFGR_HPRE_SYSCLK_NODIV); /* Set. 50MHz Max. 50MHz */
- rcc_set_adcpre(RCC_CFGR_ADCPRE_PCLK2_DIV2); /* Set. 12.5MHz Max. ?? */
- rcc_set_ppre1(RCC_CFGR_PPRE1_HCLK_DIV2); /* Set. 25MHz Max. 25MHz */
- rcc_set_ppre2(RCC_CFGR_PPRE2_HCLK_NODIV); /* Set. 50MHz Max. 50MHz */
- /*
- * Sysclk runs with 72MHz -> 2 waitstates.
- * 0WS from 0-24MHz
- * 1WS from 24-48MHz
- * 2WS from 48-72MHz
- */
- flash_set_ws(FLASH_LATENCY_2WS);
- /*
- * Set the PLL multiplication factor to 2.
- * 25MHz (external) * 2 (multiplier) / 1 (PLLXTPRE_HSE_CLK) = 50MHz
- */
- rcc_set_pll_multiplication_factor(RCC_CFGR_PLLMUL_PLL_CLK_MUL2);
- /* Select HSI as PLL source. */
- rcc_set_pll_source(RCC_CFGR_PLLSRC_HSE_CLK);
- /*
- * no divisor hse
- */
- rcc_set_pllxtpre(RCC_CFGR_PLLXTPRE_HSE_CLK);
- /* Enable PLL oscillator and wait for it to stabilize. */
- rcc_osc_on(PLL);
- rcc_wait_for_osc_ready(PLL);
- /* Select PLL as SYSCLK source. */
- rcc_set_sysclk_source(RCC_CFGR_SW_SYSCLKSEL_PLLCLK);
- /* Set the peripheral clock frequencies used */
- rcc_ppre1_frequency = 25000000;
- rcc_ppre2_frequency = 50000000;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement