STM32学习总结(一)——时钟RCC
系列文章目录
第一章 STM32学习总结(一)——时钟RCC
文章目录
目录
前言
二、STM32时钟树
1.时钟树
2.时钟源
3.时钟系统
三、STM32时钟配置
1.系统时钟配置
2.外设时钟配置
总结
前言
一开始接触STM32时就被时钟难住了,复杂的时钟树上的条条框框对于初学者真的很不友好,但是后面详细且耐心地去看时,还是能get到很多东西,时钟树也成了后续编程主要查阅的资料之一。以下是我对于STM32时钟系统的理解,参考了下面这位大佬的博客。(25条消息) 【STM32】系统时钟RCC详解(超详细,超全面)_Z小旋的博客-CSDN博客_stm32时钟
一、时钟是什么?
时钟是MCU的生命源泉,没有时钟信号,CPU和任何外设都不能工作。学习单片机一开始就应该弄懂所学单片机的时钟系统,这可以为后续的外设开发和灵活使用单片机奠定基础。
二、STM32时钟树
1.时钟树
转载自(25条消息) 【STM32】系统时钟RCC详解(超详细,超全面)_Z小旋的博客-CSDN博客_stm32时钟
2.时钟源
STM32有四个时钟源,这四种时钟源根据时钟频率高低又可以分为高速时钟源和低速时钟源,其中高速时钟源分别是内部8MHz的RC振荡器产生的HSI时钟信号,高速外部时钟信号(HSE)。低速时钟源分别是一个32.768kHz的低速外部晶体或陶瓷谐振器产生的LES时钟信号,低功耗时钟源LSI,时钟频率大约40kHz。
3.时钟系统
3.1 由时钟树可知,HSI和HSE以及PLL锁相环倍频器的PLLCLK经选择器用于系统时钟,如下图
系统时钟经过AHB预分频和APB预分频作用于各个外设。每个APB预分频线都是一个时钟总线,特定的外设会挂在特定的总线上,例如通用定时器的挂在APB1时钟总线上,经过特定的预分频系数后得到一个精准的时钟频率,用于定时器的计时。
3.2 LSE和LSI作用于RTC时钟和独立看门狗时钟
三、STM32时钟配置
1.系统时钟配置
上文提到了,STM32的系统时钟由HSE和HSI以及两者的倍频时钟PLLCLK,三者之一提供,我们在具体使用时,首先需要配置系统时钟,一般常见的SYSCLK为最高系统时钟频率72MHZ,这是经HSE的外部8M晶振时钟经PLL锁相环8倍频得来的。官方的标准库提供了系统时钟配置函数Stm32_Clock_Init(u8 PLL),PLL选择的是PLL锁相环倍频系数,一般情况下是9,在主函数的开头会调用这个函数。
void Stm32_Clock_Init(u8 PLL)
{unsigned char temp=0; MYRCC_DeInit(); //复位并配置向量表RCC->CR|=0x00010000; //外部高速时钟使能HSEONwhile(!(RCC->CR>>17));//等待外部时钟就绪RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;PLL-=2; //抵消2个单位(因为是从2开始的,设置0就是2)RCC->CFGR|=PLL<<18; //设置PLL值 2~16RCC->CFGR|=1<<16; //PLLSRC ON FLASH->ACR|=0x32; //FLASH 2个延时周期RCC->CR|=0x01000000; //PLLONwhile(!(RCC->CR>>25));//等待PLL锁定RCC->CFGR|=0x00000002;//PLL作为系统时钟 while(temp!=0x02) //等待PLL作为系统时钟设置成功{ temp=RCC->CFGR>>2;temp&=0x03;}
}
2.外设时钟配置
在配置相关外设时需要先使能相关时钟,我们只需要需要通过查阅时钟树了解该外设是挂在哪个总线上的,然后使用固件库中的时钟使能函数使能相关函数就可以了,和配置寄存器比较,这是非常方便且省时的!下面提供一段配置TIM2为定时器中断的程序,在配置相关参数前就使能了定时器的时钟,关于定时器的相关配置和学习总结会在后续文章中详细记录,有需要的可以关注后续的文章。
void TIM2_Int_Init(u16 arr,u16 psc)//定时器2中断初始化 arr为重装载值 psc为分频系数 主函数要进行中断分组
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;NVIC_InitTypeDef NVIC_InitStruct;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//定时器时钟使能TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitStruct.TIM_Period=arr;TIM_TimeBaseInitStruct.TIM_Prescaler=psc;TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);//定时器初始化,配置参数TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//设置更新中断NVIC_InitStruct.NVIC_IRQChannel=TIM2_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_InitStruct);TIM_ARRPreloadConfig(TIM2,ENABLE);TIM_Cmd(TIM2,ENABLE);//使能TIM2定时器
}
总结
以上就是关于STM32时钟的全部学习总结,本人也是完全自学,如有错误或者理解不到位的地方以及博客写作的问题,请各位大佬在评论区指出!第一次学习时钟时一脸懵逼,后面每一次回顾都有不同程度的理解,这才知道学习贵在坚持,持之以恒的学习才能克服更多困难,大家一起加油,冲就够了!
STM32学习总结(一)——时钟RCC相关推荐
- 【STM32学习】实时时钟 —— RTC
[STM32学习]实时时钟 -- RTC 零.参考 一.工作原理 1.RTC介绍 2.工作过程 二.相关寄存器 三.代码说明 1.rtc初始化 2.关于中断 3.中断配置代码(仅供参考) 3.1 秒中 ...
- STM32学习总结之时钟
学习目标: 掌握 STM32 基础知识 STM32单片机学习总结之------时钟树与时钟源 学习内容: 这个图说明了STM32的时钟走向,从图的左边开始,从时钟源一步步分配到外设时钟.从时钟频率来说 ...
- stm32内部低速rtc_STM32时钟RCC详解
时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令.时钟系统就是CPU的脉搏,决定cpu速率,像人的心跳一样只有有了心跳,人才能做其他的事情,而单片机有了时钟,才能够运行执行指令,才能 ...
- 【STM32】STM32标准库与HAL库对照学习教程特别篇--系统时钟RCC详讲
[STM32]STM32标准库与HAL库对照学习教程特别篇--系统时钟RCC详讲 一.前言 二.时钟是什么 三.时钟树 1.时钟树图 2.时钟树讲解 左边部分 中间部分 右边部分 特殊部分 四.初始化 ...
- STM32学习笔记(四)丨TIM定时器及其应用(定时中断、内外时钟源选择)
本篇文章包含的内容 一.TIM 定时器 1.1 TIM 定时器简介 1.2 TIM 定时器类型及其工作原理简介 1.2.1 基本定时器工作原理及其结构 1.2.2 通用定时器工作原理及其结构 1.2. ...
- STM32学习心得二十一:实时时钟RTC和备份寄存器BKP特征、原理及相关实验代码解读
记录一下,方便以后翻阅~ 主要内容 1) RTC特征与原理: 2) BKP备份寄存器特征与原理: 3) RTC常用寄存器+库函数介绍: 4) 相关实验代码解读. 实验内容: 因为没有买LCD屏,所以计 ...
- 【STM32学习】时钟配置详解
[STM32学习]时钟配置详解 看懂时钟图 结合代码 外部高速时钟修改 看懂时钟图 在刚开始学习32的时候,并不会在意这些,或者即使看了也看的不是很明白.随着学习的深入,我们发现看门狗.定时器.ADC ...
- 【STM32】STM32f4学习之路--时钟
文章目录 初学STM32,发现他的时钟系统有点复杂(相对于之前学的51单片机来说).这是为什么? –51单片机的I/O口少,外设简单,所以时钟一般来说都是固定的,这也导致了51单片机应用场景的局限性. ...
- 《STM32学习笔记》4——核心功能电路与编程(下)
接上文,文中的图片,大多数来自视频的截图(来自洋桃电子). 欢迎大家批评指正! STM32学习笔记-专栏 文章目录 一.蜂鸣器驱动 1.蜂鸣器介绍 2.蜂鸣器电路 3.蜂鸣器程序 二. MIDI 音乐 ...
最新文章
- 《算法技术手册》一2.4.6 二次方的算法性能
- PHP Warning: File upload error - unable to create a temporary file in Unknown on line 0
- 微信小程序把玩(四十)animation API
- javaWeb中的Model1和Model2
- 【NOIP2013模拟联考5】休息(rest)
- 三分钟Docker-环境搭建篇
- AT5160-[AGC037C]Numbers on a Circle【贪心,堆】
- python 元类 type_Python 使用元类type创建类对象常见应用详解
- I/O模型系列之四:两种高性能IO设计模式 Reactor 和 Proactor
- PyQt特殊对话框介绍
- HALCON学习之旅(二)
- 预防AD对象被误删除
- [2019徐州网络赛J题]Random Access Iterator
- ThinkPad笔记本安装win10+Ubuntu17.10双系统
- 全奖热招 | TUM、HKU、McGill、UTS等8所高校全奖博士招生信息汇总
- 液晶屏的接口信号RGB_TTL、LVDS、MIPI
- 数据结构python吕云翔_数据结构(PYTHON版)/吕云翔
- could和may区别请求_英语教学:外教这样区分can,may,could
- vs 设置护眼背景颜色
- 重要公告|Moonriver成功续约Kusama平行链插槽租赁期