STM32F4_RCC系统时钟配置及描述
Ⅰ、概述
对于系统时钟应该都知道它的作用,就是驱动整个芯片工作的心脏,如果没有了它,就等于人没有了心跳。
对于使用开发板学习的朋友来说,RCC系统时钟这一块知识估计没怎么去配置过,原因在于开发板提供的晶振基本上都是官方标准的时钟频率,使用官方的标准库,这样系统时钟就是默认的配置,也就是默认的频率。但对于自己设计开发板,或者想要改变系统时钟频率(如:降低功耗就需要降频)的朋友来说,配置系统时钟就有必要了。
关于时钟这一块对定时器(TIM、RTC、WDG等)相关的外设也比较重要,因为要求精准,就需要时钟频率精准。
该文将描述关于系统时钟配置及注意的相关事项,更多详情内容,请往下看。
本着免费分享的原则,方便大家手机学习知识,定期在微信平台分享技术知识。如果你觉得分享的内容对你有用,又想了解更多相关的文章,请用微信搜索“EmbeddDeveloper” 或者扫描下面二维码、关注,将有更多精彩内容等着你。
Ⅱ、关于时钟
1.时钟分类
STM32芯片(所有型号)的时钟包含4类:
HSE(High Speed External)高速外部时钟
HSI(High Speed Internal)高速内部时钟
LSE(Low Speed External)低速外部时钟
LSI(Low Speed Internal)低速内部时钟
2.时钟源
STM32芯片(所有型号)驱动系统时钟的时钟源:
HSI 内部高速时钟
HSE 外部高速时钟
PLLCLK倍频时钟
STM32具有以下两个次级时钟源:
32 kHz 低速内部 RC (LSI RC),该 RC 用于驱动独立看门狗,也可选择提供给 RTC 用于停机/待机模式下的自动唤醒。
32.768 kHz 低速外部晶振( LSE 晶振),用于驱动 RTC 时钟 (RTCCLK)。对于每个时钟源来说,在未使用时都可单独打开或者关闭,以降低功耗。
3.时钟树(框图)
关于STM32的时钟树针对不同系列芯片可能存在差异。F0、F1和F3系列芯片(主流芯片,频率相对较低)有很多相似的地方,F2和F4(高性能芯片)系列芯片有很多相似的地方。但是,F3芯片和F4芯片的时钟树之间却存在很大差异,具体请看参考手册RCC相关章节。
STM32时钟控制器为应用带来了高度的灵活性,用户在运行内核和外设时可选择使用外部晶振或者使用振荡器,既可采用最高的频率,也可为以太网、 USB OTG FS 以及 HS、 I2S 和 SDIO等需要特定时钟的外设保证合适的频率。
以F417芯片为例:可通过多个预分频器配置 AHB 频率、高速 APB (APB2) 和低速 APB (APB1)。 AHB 域的最大频率为 168 MHz。高速 APB2 域的最大允许频率为 84 MHz。低速 APB1 域的最大允许频率为 42 MHz。实际上输出的最大时钟可以适当提高一点,但为了保证在多种环境下,最好还是不要超过标准的最大值。
STM32F4xx 器件具有两个 PLL:
主 PLL (PLL) 由 HSE 或 HSI 振荡器提供时钟信号,并具有两个不同的输出时钟:
第一个输出用于生成高速系统时钟(最高达 168 MHz)
第二个输出用于生成 USB OTG FS 的时钟 (48 MHz)、随机数发生器的时钟
专用 PLL (PLLI2S) 用于生成精确时钟,从而在 I2S 接口实现高品质音频性能。
由于在 PLL 使能后主 PLL 配置参数便不可更改,所以建议先对 PLL 进行配置,然后再使能(选择 HSI 或 HSE 振荡器作为 PLL 时钟源,并配置分频系数 M、 N、 P 和 Q)。
PLLI2S 使用与 PLL 相同的输入时钟( PLLM[5:0] 和 PLLSRC 位为两个 PLL 所共用)。但是, PLLI2S 具有专门的使能/禁止和分频系数( N 和 R)配置位。在 PLLI2S 使能后,配置参数便不能更改。
Ⅲ、代码分析
以STM32F4x5、x7系列芯片为例来分析一下系统时钟的配置。
参考软件工程:
https://yunpan.cn/cRepWDShSK4yc 访问密码 65b1
1.倍频参数
结合上面时钟树和源代码可以看得出来,系统时钟PLLCLK的计算主要是配置PLL_M、PLL_N、PLL_P这三个参数,最后168M是通过分频、倍频得出来的。
2.验证时钟频率
对于STM32芯片来说,验证系统时钟最终运行多大的速度,最准确的验证方法的用示波器测试它的系统时钟。
这里描述一下怎样用示波器来测试系统时钟。其实很简单,就是在软件代码里面配置时钟输出(这里可以输出多种类型的时钟HSE、HSI、PLLCLK等),根据代码配置不同,相应输出的时钟就不同。请看源代码:
我提供的代码里面就有这一选项,将定义配置为1,就打开了这个功能。时钟输出的参数有两个,时钟源,分频值。注意:这里的最大输出时钟是100M,所以PLLCLK时钟分频之后才能输出,不然你用示波器检测不到波形(我测试过了)。
最后输出的波形如图:
Ⅳ、说明
关于STM32的开发,软件兼容性是很好的,不要觉得你的芯片和我总结的实例有差异就不看了,其实是错误的认识,特别是同一个系列的芯片基本上程序都兼容,也就是可以互相使用。
以上总结仅供参考,若有不对之处,敬请谅解。
Ⅴ、最后
关注微信,回复“更多内容”,将获得更多内容(如:UCOS实例等,不断更新中......)。
如果你喜欢我分享的内容,你又想了解更多相关内容,请关注文章开头的微信公众号,新内容持续更新中,后期将会有更多精彩内容出现。
STM32F4_RCC系统时钟配置及描述的更多相关文章
- STM32F4系统时钟配置及描述
STM32F4系统时钟配置及描述 stm32f407时钟配置方法(感觉很好,分享一下) STM32F4_RCC系统时钟配置及描述 STM32F4时钟设置分析 stm32f4 - 时钟树分析配置
- 痞子衡嵌入式:系统时钟配置不当会导致i.MXRT1xxx系列下OTFAD加密启动失败
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是系统时钟配置不当会导致i.MXRT1xxx系列下OTFAD加密启动失败问题. 我们知道,i.MXRT1xxx家族早期型号(RT1050/ ...
- STM32F4时钟配置库函数详解
在STM32中,所有的应用都是基于时钟,所以时钟的配置就尤为重要了,而不能仅仅只知道使用默认时钟. STM32F4的时钟树如上图所示,HSE为外部接入的一个8M的时钟,然后再给PLL提供输入时钟,经过 ...
- STM32之系统时钟
转载:http://www.openedv.com/posts/list/302.htm 时钟系统是处理器的核心,所以在学习STM32所有外设之前,认真学习时钟系统是必要的,有助于深入理解STM32. ...
- STM32—时钟树(结合系统时钟函数理解)
时钟树的概念: 我们可以把MCU的运行比作人体的运行一样,人最重要的是什么?是心跳! 心脏的周期性收缩将血液泵向身体各处.心脏对于人体好比时钟对于MCU,微控制器(MCU)的运行要靠周期性的时钟脉冲来 ...
- STM32F2系列系统时钟默认配置
新到一家公司后,有个项目要用到STM32F207Vx单片机,找到网上的例子照猫画虎的写了几个例子,比如ADC,可是到了ADC多通道转换的时候就有点傻眼了,这里面的时钟跑的到底是多少M呢?单片机外挂的时 ...
- 使用HSI配置系统时钟
这里我就直接粘代码了.很简单.上节理解了 这也就能简单了. void HSI_SetSysClk( uint32_t RCC_PLLMul_x ) { __IO uint32_t HSIStatus ...
- 使用HSE配置系统时钟并用MCO输出监测系统时钟
使用模板,在User下新建文件夹RCC 新建bsp_rccclkconfig.h和bsp_rccclkconfig.c 工程和魔术棒添加 对照着上节的RCC源文件编写: void HSE_SetSys ...
- STM32F030 启用内部晶振并配置系统时钟为48M
在文件 system_stm32f0xx.c 里的函数 static void SetSysClock(void) { if (HSEStatus == (uint32_t)0x01) // 存在外部 ...
随机推荐
- 【转】 利用.dSYM和.app文件准确定位Crash位置
http://blog.csdn.net/jinzhu117/article/details/20615991 首先,确保在release(Ad Hoc或者App Store)一个版本时,保存了对应的 ...
- java 计算 文件 md5
public class MD5Check { /** * 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合 */ pro ...
- 下一代大数据系统和4S标准
大数据行业发展到今天,它创造的价值和带来的社会效应,大家已经看得很明白,同时很多问题和不足也暴露出来,特别是hadoop能够提供的数据处理能力,现在已经挖掘到极限,但是现在各行业对数据的存储和计算需求 ...
- 联系博主(推介联系QQ)
李莫,OI 蒟蒻一只 QQ:740929894 邮箱:12958954@163.com limo740929894@gmail.com (目测国外网站的邮件发不进网易邮箱,所以注册了个Gmail,但是 ...
- VR就是下一个浪潮_2016 (GMGC) 全球移动游戏大会观后感
"VR就是下一个浪潮" --2016 (GMGC) 全球移动游戏大会观后感 早在2014年参会Unity举办的一年一度的金立方盛典大会,就初次体验了VR头盔设备,于是印象深刻 ...
- 剖析Disruptor:为什么会这么快?(二)神奇的缓存行填充
原文链接:http://mechanitis.blogspot.com/2011/07/dissecting-disruptor-why-its-so-fast_22.html 需FQ 计算机入门 ...
- 自定义PageControl样式
#define iOS7 ([[UIDevice currentDevice].systemVersion doubleValue] >= 7.0) //调用方法 改变PageControl样式 ...
- a mystrious max subquence sum
#include<cstdio>#include<cstring>const int maxn=100005;int buf[maxn];int main(){ freopen ...
- 【MySQL】MySQL索引背后的之使用策略及优化【转】
转自:http://database.ctocio.com.cn/353/11664853.shtml 另外很不错的对于索引及索引优化的文章: http://www.cnblogs.com/magia ...
- 使用cnpm搭建企业内部私有NPM仓库
cnpm是企业内部搭建npm镜像和私有npm仓库的开源方案.它同时解决了现有npm架构的一些问题. 为什么企业需要私有NPM 主要有如下理由: 确保npm服务快速.稳定:对于企业来说,上线生产系统的时 ...