码迷,mamicode.com
首页 > 其他好文 > 详细

STM32F4xx那点事(二)——系统时钟的配置

时间:2016-04-29 01:54:54      阅读:2633      评论:0      收藏:0      [点我收藏+]

标签:stm32f405rg 系统时钟

每次接触一款新的单片机,我都会很好奇该单片机的系统时钟是多少MHz,怎样才能达到Datasheet中描述的最大系统时钟,该单片机的外设的时钟会是多少MHz呢?如果要使用延时,我怎么编写程序才能实现精准的延时呢?我认为这些问题是我开始接触新单片机之前需要了解的。

对于每款ARM Cortex-M系列单片机而言,厂商为了更好的推广自己的单片机,同时方便设计人员使用,降低产品开发周期,都会将该单片机的外设相关寄存器以及外设的相关函数都实现并打包,放在官方网站上免费供大家使用。STM32F405RG的标准外设库还包含有DSP核的各种运算函数。如果需要,可以从http://www2.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-libraries/stsw-stm32065.html#下载。

如果使用标准外设库,我们可以根据标准外设库中的system_stm32f4xx.c文件中的代码分析可知:

#if defined(STM32F40_41xxx) || defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F401xx) || defined(STM32F469_479xx)
 #define PLL_M      25
#elif defined (STM32F446xx)
 #define PLL_M      8
#elif defined (STM32F410xx) || defined (STM32F411xE)
 #if defined(USE_HSE_BYPASS)
  #define PLL_M      8    
 #else /* !USE_HSE_BYPASS */
  #define PLL_M      16
 #endif /* USE_HSE_BYPASS */
#else
#endif
#if defined (STM32F40_41xxx)
#define PLL_N      336
/* SYSCLK = PLL_VCO / PLL_P */
#define PLL_P      2
#endif
#if defined(STM32F40_41xxx)
  uint32_t SystemCoreClock = 168000000;
#endif

根据编程手册关于时钟寄存器的内容,可知

PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N 

SYSCLK=PLL_VCO/PLL_P

式中,HSE_VALUE表示单片机外接晶振的频率,HSI_VALUE表示单片机内部振荡器的频率,本实验板使用的是外部25MHz的晶振,根据程序中的配置,我们可以计算出SystemCoreClock =168000000。


本文出自 “用心创造” 博客,请务必保留此出处http://chasingdreams.blog.51cto.com/2790339/1768816

STM32F4xx那点事(二)——系统时钟的配置

标签:stm32f405rg 系统时钟

原文地址:http://chasingdreams.blog.51cto.com/2790339/1768816

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!