/** * @brief Get current HCLK clock frequency. * @param None. * @return HCLK clock frequency. The clock UNIT is in Hz. */ uint32_t SysGet_HCLKFreq(void) { uint32_t u32Freqout, u32AHBDivider, u32ClkSel; u32ClkSel = CLK->CLKSEL0 & CLK_CLKSEL0_HCLK_S_Msk; if (u32ClkSel == CLK_CLKSEL0_HCLK_S_HXT) { /* external HXT crystal clock */ u32Freqout = __HXT; } else if(u32ClkSel == CLK_CLKSEL0_HCLK_S_LXT) { /* external LXT crystal clock */ u32Freqout = __LXT; } else if(u32ClkSel == CLK_CLKSEL0_HCLK_S_PLL) { /* PLL clock */ u32Freqout = SysGet_PLLClockFreq(); } else if(u32ClkSel == CLK_CLKSEL0_HCLK_S_LIRC) { /* internal LIRC oscillator clock */ u32Freqout = __LIRC; } else { /* internal HIRC oscillator clock */ if((CLK->PWRCTL & CLK_PWRCTL_HIRC_FSEL_Msk) == CLK_PWRCTL_HIRC_FSEL_Msk) u32Freqout = __HIRC16M; else u32Freqout = __HIRC12M; } u32AHBDivider = (CLK->CLKDIV0 & CLK_CLKDIV0_HCLK_N_Msk) + 1 ; return (u32Freqout/u32AHBDivider); }
/** * @brief Get current HCLK clock frquency. * @param None. * @return HCLK clock frquency. The clock UNIT is in Hz. */ uint32_t SysGet_HCLKFreq(void) { uint32_t u32Freqout, u32AHBDivider, u32ClkSel; u32ClkSel = CLK->CLKSEL0 & CLK_CLKSEL0_HCLK_MASK; if (u32ClkSel == CLK_CLKSEL0_HCLK_HXT) /* external HXT crystal clock */ { u32Freqout = __XTAL; } else if(u32ClkSel == CLK_CLKSEL0_HCLK_LXT) /* external LXT crystal clock */ { u32Freqout = __RTC_XTAL; } else if(u32ClkSel == CLK_CLKSEL0_HCLK_PLL) /* PLL clock */ { u32Freqout = SysGet_PLLClockFreq(); } else if(u32ClkSel == CLK_CLKSEL0_HCLK_LIRC) /* internal LIRC oscillator clock */ { u32Freqout = __IRC10K; } else /* internal HIRC oscillator clock */ { u32Freqout = __IRC12M; } u32AHBDivider = (CLK->CLKDIV0 & CLK_CLKDIV0_HCLK_MASK) + 1 ; return (u32Freqout/u32AHBDivider); }