温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-06-23 17:00:21 来源:网络 阅读:1378 作者:William_Derwin 栏目:编程语言

每次接触一款新的单片机,我都会很好奇该单片机的系统时钟是多少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。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI