STM32F0系列寄存器操作02RCC时钟配置

合集下载

STM32微控制器寄存器说明

STM32微控制器寄存器说明

PLLXTPRE:HSE 分频器作为 PLL 输入(HSE divider for PLL entry)。由软件
置‘1’或清‘0’来分频 HSE 后作为 PLL 输入时钟。只能在关闭 PLL 时才能
写入此位。
0:HSE 不分频; 1:HSE 2 分频
PLLSRC:PLL 输入时钟源(PLL entry clock source)。由软件置‘1’或清‘0’
保 HSI HSI
留 RDY ON
位 31:26 位 25 位 24
位 23:20 位 19 位 18
位 17
位 16
位 15:8 位 7:3
保留,始终读为 0。 PLLRDY:PLL 时钟就绪标志(PLL clock ready flag)。PLL 锁定后由硬件置‘1’。 0:PLL 未锁定; 1:PLL 锁定。 PLLON:PLL 使能(PLL enable)。由软件置‘1’或清零。当进入待机和停止 模式时,该位由硬件清零。当 PLL 时钟被用作或被选择将要作为系统时钟时, 该位不能被清零。 0:PLL 关闭; 1:PLL 使能。 保留,始终读为 0。 CSSON:时钟安全系统使能(Clock security system enable)。由软件置‘1’或 清零以使能时钟监测器。 0:时钟监测器关闭; 1:如果外部 4-16MHz 振荡器就绪,时钟监测器开启。 HSEBYP:外部高速时钟旁路(External high-speed clock bypass)。在调试模式 下由软件置‘1’或清零来旁路外部晶体振荡器。只有在外部 4-16MHz 振荡器 关闭的情况下,才能写入该位。 0:外部 4-16MHz 振荡器没有旁路; 1:外部 4-16MHz 外部晶体振荡器被旁路。 HSERDY:外部高速时钟就绪标志(External high-speed clock ready flag)。由硬 件置‘1’来指示外部 4-16MHz 振荡器已经稳定。在 HSEON 位清零后,该位 需要 6 个外部 4-16MHz 振荡器周期清零。 0:外部 4-16MHz 振荡器没有就绪; 1:外部 4-16MHz 振荡器就绪。 HSEON:外部高速时钟使能(External high-speed clock enable)。由软件置‘1’ 或清零。当进入待机和停止模式时,该位由硬件清零,关闭 4-16MHz 外部振荡 器。当外部 4-16MHz 振荡器被用作或被选择将要作为系统时钟时,该位不能被 清零。 0:HSE 振荡器关闭; 1:HSE 振荡器开启。 HSICAL[7:0]:内部高速时钟校准(Internal high-speed clock calibration)。系统 启动时,这些位被自动初始化。 HSITRIM[4:0]:内部高速时钟调整(Internal high-speed clock trimming)。由软 件写入来调整内部高速时钟,它们被叠加在 HSICAL[7:0]数值上。这些位在

stm32基于库函数--RCC时钟配置

stm32基于库函数--RCC时钟配置

stm32基于库函数--RCC时钟配置1.时钟复位RCC_DeInit();2.开启HSERCC_HSEConfig(RCC_HSE_ON);3.选择PLL倍频HSERCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);4.设置系统时钟为PLL后的时钟RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);5.设置系统各部分时钟/* 选择HCLK(AHB)时钟源为SYSCLK 1分频 */RCC_HCLKConfig(RCC_SYSCLK_Div1);/* 选择PCLK2时钟源为 HCLK(AHB) 1分频 */RCC_PCLK2Config(RCC_HCLK_Div1);/* 选择PCLK1时钟源为 HCLK(AHB) 2分频 */RCC_PCLK1Config(RCC_HCLK_Div2);6.开启功能时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);7.综合示例代码void RCC_Configuration(void) {/* 定义枚举类型变量 HSEStartUpStatus */ErrorStatus HSEStartUpStatus;/* 复位系统时钟设置*/RCC_DeInit();/* 开启HSE*/RCC_HSEConfig(RCC_HSE_ON);/* 等待HSE起振并稳定*/HSEStartUpStatus = RCC_WaitForHSEStartUp();/* 判断HSE起是否振成功,是则进入if()内部 */if(HSEStartUpStatus == SUCCESS) {/* 选择HCLK(AHB)时钟源为SYSCLK 1分频 */RCC_HCLKConfig(RCC_SYSCLK_Div1);/* 选择PCLK2时钟源为 HCLK(AHB) 1分频 */RCC_PCLK2Config(RCC_HCLK_Div1);/* 选择PCLK1时钟源为 HCLK(AHB) 2分频 */RCC_PCLK1Config(RCC_HCLK_Div2);/* 设置FLASH延时周期数为2 */FLASH_SetLatency(FLASH_Latency_2);/* 使能FLASH预取缓存 */FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* 选择锁相环(PLL)时钟源为HSE 1分频,倍频数为9,则PLL输出频率为 8MHz * 9 = 72MHz */RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/* 使能PLL */RCC_PLLCmd(ENABLE);/* 等待PLL输出稳定 */while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);/* 选择SYSCLK时钟源为PLL */RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/* 等待PLL成为SYSCLK时钟源 */while(RCC_GetSYSCLKSource() != 0x08); }/* 打开APB2总线上的GPIOA时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_AP B2Periph_USART1, ENABLE);}2018-7-15 11:41:46 meetwit。

STM32时钟系统的配置寄存器和源码分析

STM32时钟系统的配置寄存器和源码分析

STM32时钟系统的配置寄存器和源码分析一、时钟系统1.概述2.时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令,时钟系统就是CPU的脉搏,决定cpu速率。

STM32有多个时钟来源的选择,为什么 STM32 要有多个时钟源呢?因为首先STM32 本身非常复杂,外设非常的多,而使用任何外设都需要时钟才能启动,但是并不是所有外设都需要系统时钟这么高的频率,比如看门狗以及 RTC 只需要几十 k 的时钟即可。

同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也会越弱,所以对于较为复杂的MCU 一般都是采取多时钟源的方法来解决这些问题。

如图所示:3.4.STM32F10x时钟系统图5.6.从图中蓝色部分可以看出STM32有5个时钟源:HSI、HSE、LSE、LSI、PLL。

•HSI时钟:高速内部时钟,RC振荡器,频率约为8MHz,精度不高。

直接作为 8MHz 的系统时钟或者用作 4MHz 的PLL时钟输入。

•HSE时钟:高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为3MHz~25MHz。

(一般是8MHZ),外部振荡器可为系统提供非常精确的主时钟。

•LSI时钟:低速内部时钟,RC振荡器,频率为32kHz,提供低功耗时钟。

主要供独立看门狗和自动唤醒单元使用。

•LSE时钟:低速外部时钟,接频率为32.768kHz的石英晶体,它为实时时钟或者其他定时功能提供一个低功耗且精确的时钟源。

•PLL时钟:产生倍频的输出3.系统时钟(SYSCLK)选择4.从时钟系统图中可以看出,系统复位后,HSI振荡器被选为系统时钟。

此时系统时钟的来源有三种选择,可以选择HSI、PLL、HSE/2,而PLL又有两种时钟源可以选择HSE、HSI/2。

5.注意:切换时钟源时需要等待新的时钟源就绪,否则系统时钟源不会切换。

在时空控制寄存器(RCC_CR)里的状态指示可以看到已经准备好的时钟已经被当前系统使用的时钟。

stm32如何配置时钟

stm32如何配置时钟

学习STM32笔记2 如何配置时钟学习STM32笔记2 如何配置时钟/*************************************************************该程序目的是用于测试核心板回来后是否能正常工作。

包括两个按键、两个LED现实。

按键为PC4、PC5,LED为PA0\PA1。

LED为低电平时点亮。

按键为低电平时触发。

************************************************************/#i nclude "stm32f10x_lib.h"void RCC_Configuration(void);//设置系统主时钟void GPIO_Configuration(void);//设置邋邋IO参数void NVIC_Configuration(void);//设置中断表地址void delay(void);//延时函数int main(void){#ifdef DEBUGdebug();#endifRCC_Configuration();NVIC_Configuration();GPIO_Configuration();while (1){delay();//设置指定的数据端口位GPIO_SetBits(GPIOA,GPIO_Pin_0);//设置指定的数据端口位delay();GPIO_ResetBits(GPIOA,GPIO_Pin_0);//清除指定的数据端口位GPIO_SetBits(GPIOA,GPIO_Pin_1);delay();GPIO_ResetBits(GPIOA,GPIO_Pin_1);delay();/*********************************************使用setbits 与resetbits 是比较简单,其实还是可以使用其它函数。

STM32入门教程--系统时钟配置

STM32入门教程--系统时钟配置

STM32 系统时钟配置一、STM32的时钟系统时钟是什么?时钟通常是振荡器(如晶振)产生的特定频率的方波信号,时钟周期是时钟频率的倒数,时钟频率1MHz时钟周期为1/1000000=1us。

时钟周期是MCU处理指令的最小时间单元,每个程序指令都需要若干个时钟周期,MCU的时钟频率越快,完成一个指令的时间就越短,速度就越快。

时钟是MCU运行的基础,好比MCU的脉搏,是MCU性能的重要参数。

每个MCU 都是在某个特定的时钟频率下进行工作的,如C51单片机时钟频率为12MHz,而STM32F103 的系统时钟频率是72MHz。

STM32的时钟系统STM32时钟频率较高,时钟越快功耗越大,同时抗电磁干扰能力也会越弱。

而且STM32外设非常多,而通常外设是不需要像系统时钟那么高的频率的,比如看门狗和RTC 只需要几十K的时钟即可。

另外实际使用的时候通常只会用到有限的几个外设,STM32可以只给需要启动的外设分配时钟,以此来降低功耗。

由此可看出STM32 的时钟系统较为复杂,它采用了多个时钟源的方法来解决这些问题。

STM32 有4个独立时钟源:HSI、HSE、LSI、LSE。

①、HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。

②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。

③、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。

④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。

其中LSI是作为IWDGCLK(独立看门狗)时钟源和RTC时钟源而独立使用,HSI高速内部时钟 HSE高速外部时钟 PLL锁相环时钟这三个经过分频或者倍频作为系统时钟来使用基本时钟源(图中绿色箭头指出):(1)HSI高速内部时钟,RC振荡器,8MHz。

(2)HSE高速外部时钟,石英/陶瓷谐振器,8MHz。

(3)LSI低速内部时钟,RC振荡器,40kHz。

学习STM32笔记2如何配置时钟

学习STM32笔记2如何配置时钟

学习STM32笔记2 如何配置时钟*学习STM32笔记2 如何配置时钟原创笔记2009-09-20 19:56 阅读116 评论0字号:大中小/*************************************************************该程序目的是用于测试核心板回来后是否能正常工作。

包括两个按键、两个LED现实。

按键为PC4、PC5,LED为PA0\PA1。

LED为低电平时点亮。

按键为低电平时触发。

************************************************************/#i nclude "stm32f10x_lib.h"void RCC_Configuration(void);//设置系统主时钟void GPIO_Configuration(void);//设置邋邋IO参数void NVIC_Configuration(void);//设置中断表地址void delay(void);//延时函数int main(void){#ifdef DEBUGdebug();#endifRCC_Configuration();NVIC_Configuration();GPIO_Configuration();while (1){delay();//设置指定的数据端口位GPIO_SetBits(GPIOA,GPIO_Pin_0);//设置指定的数据端口位delay();GPIO_ResetBits(GPIOA,GPIO_Pin_0);//清除指定的数据端口位GPIO_SetBits(GPIOA,GPIO_Pin_1);delay();GPIO_ResetBits(GPIOA,GPIO_Pin_1);delay();/*********************************************使用setbits 与resetbits 是比较简单,其实还是可以使用其它函数。

STM32 RCC复位时钟配置寄存器

STM32   RCC复位时钟配置寄存器

RCCSTM32 的RCC看起来还是蛮复杂的,英文全称是Reset Clock Config,复位时钟配置,以下基本网上贴的,整理了一下,非原创哈。

一、时钟概述STM32有多个时钟源,分别是:HSI: 内部高速时钟(上电默认启动),因精度不高所以先不采用,以后如果需要再使用LSI:内部低速时钟,精度不高,一般用于IWDGCLKHSE:外部高速时钟,系统时钟一般采用它,经过PLL倍频作为系统同时钟LSE:外部低速时钟,一般专门用于RTC,等到RTC模块时再使用二、配置流程1.将RCC寄存器重新设置为默认值RCC_DeInit(default 默认)2.打开外部高速时钟晶振HSE RCC_HSEConfig(RCC_HSE_ON);3.等待外部高速时钟晶振工作HSEStartUpStatus = RCC_WaitForHSEStartUp();4.设置AHB时钟RCC_HCLKConfig;5.设置高速APB2时钟 RCC_PCLK2Config;6.设置低速速APB1时钟RCC_PCLK1Config7.设置PLL RCC_PLLConfig8.打开PLL RCC_PLLCmd(ENABLE);9.等待PLL工作while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)10.设置系统时钟RCC_SYSCLKConfig11.判断是否PLL是系统时钟while(RCC_GetSYSCLKSource() != 0x08)至此系统时钟已经配置完成,STM32的每个模块都有自己的时钟,如果要使用某个模块,必须使能这个模块的时钟。

使能对应模块的时钟,STM32有个库函数,RCC_APB2PeriphClockCmd(对应模块,ENABLE)(72MHZ)或者RCC_APB1PeriphClockCmd(对应模块,ENABLE)(36MHZ);其中不同的模块有不同的时钟源,下面列举各个模块的时钟源:AHB2 时钟用于以下资源:(APB2:72MHZ)RCC_APB2Periph_AFIO 功能复用 IO 时钟RCC_APB2Periph_GPIOA GPIOA 时钟RCC_APB2Periph_GPIOB GPIOB 时钟RCC_APB2Periph_GPIOC GPIOC 时钟RCC_APB2Periph_GPIOD GPIOD 时钟RCC_APB2Periph_GPIOE GPIOE 时钟RCC_APB2Periph_ADC1 ADC1 时钟RCC_APB2Periph_ADC2 ADC2 时钟RCC_APB2Periph_TIM1 TIM1 时钟RCC_APB2Periph_SPI1 SPI1 时钟RCC_APB2Periph_USART1 USART1 时钟RCC_APB2Periph_ALL 全部 APB2外设时钟AHB1 时钟用于以下资源:(APB1:36MHZ)RCC_APB1Periph_TIM2 TIM2 时钟RCC_APB1Periph_TIM3 TIM3 时钟RCC_APB1Periph_TIM4 TIM4 时钟RCC_APB1Periph_WWDG WWDG时钟RCC_APB1Periph_SPI2 SPI2 时钟RCC_APB1Periph_USART2 USART2 时钟RCC_APB1Periph_USART3 USART3 时钟RCC_APB1Periph_I2C1 I2C1 时钟RCC_APB1Periph_I2C2 I2C2时钟RCC_APB1Periph_USB USB 时钟RCC_APB1Periph_CAN CAN时钟RTC 时钟来源:RCC_RTCCLKSource_LSE 选择 LSE 作为RTC 时钟RCC_RTCCLKSource_LSI 选择 LSI 作为RTC 时钟RCC_RTCCLKSource_HSE_Div128 选择 HSE 时钟频率除以 128 作为 RTC时钟ADC 时钟来源:该时钟源自 APB2 时钟(PCLK2)RCC_PCLK2_Div2 ADC 时钟= PCLK / 2RCC_PCLK2_Div4 ADC 时钟= PCLK / 4RCC_PCLK2_Div6 ADC 时钟= PCLK / 6RCC_PCLK2_Div8 ADC 时钟= PCLK / 8USB 时钟来源:该时钟来源于PLLCLK时钟的预分频三、RCC配置实例代码,与解析void RCC_Configuration(void){ErrorStatus HSEStartUpStatus;RCC_DeInit();//复位RCC模块的寄存器,复位成缺省值RCC_HSEConfig(RCC_HSE_ON);//开启HSE时钟,咱是用HSE的时钟作为PLL的时钟源HSEStartUpStatus = RCC_WaitForHSEStartUp();//获取HSE启动状态if(HSEStartUpStatus == SUCCESS) //如果HSE启动成功{FLASH_PrefetchBufferCmd(ENABLE);//开启FLASH的预取功能FLASH_SetLatency(FLASH_Latency_2);//FLASH延迟2个周期,RCC_HCLKConfig(RCC_SYSCLK_Div1);//配置HCLK,PCLK2,PCLK1,PLLRCC_PCLK2Config(RCC_HCLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div2);RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);RCC_PLLCmd(ENABLE);//启动PLLwhile(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET){}//等待PLL启动完成RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置系统时钟while(RCC_GetSYSCLKSource() !=0x80)//检查是否将HSE 9倍频后作为系统时钟{}}}和STM32超频比较相关,Ourdev上有个超频的帖蛮有意思的有兴趣的可以看看,附上网址:/bbs/bbs_content_all.jsp?bbs_sn=3554410总之,STM32的时钟看起来比较复杂,但是可以不用去深究,使用STM32的库函数还是很好用的,虽然效率低了点,但是其实只使用很少的次数,无所谓了,要想STM32跑起来,按照上述配置就好了,千万不要忘记为使用的模块分配时钟,不要像我,跑个LED,忘记给IO分配时钟,还在纳闷呢,为什么不亮.(摘自网络).总结:我比这位原作者好点,我第一次让STM32跑两个灯一下就顺利了.就是第一次KEIL联不上STM32有点郁闷,在网上升级了,STLINK还是不行.后来得知,原来STLINK升级版本好几个了,找了新的版本总算跟4.12联上了.我的STLINK版本号J1STM32有五个时钟源:HSI、HSE、LSI、LSE、PLL1.1HSI:高速内部时钟、RC振荡器、频率为8MHz、时钟精度较差(上电默认启动),可作为备用时钟源(时钟安全系统CSS)。

STM32F0xx 微控制器的时钟配置介绍

STM32F0xx 微控制器的时钟配置介绍

2 年 05 月
文档 ID 022837 第 1 版
1/16

目录
目录
AN4055
1
术语表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.2 专家模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4
已知限制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
文档 ID 022837 第 1 版
3/16
3
图片索引
图片索引
AN4055
图 1. 图 2. 图 3. 图 4. 图 5. 图 6. 图 7.
时钟结构图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 I2S 时钟结构图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 向导模式用户界面 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 选择时钟源 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 文件生成错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 专家模式用户界面 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 超出系统时钟频率 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32F0系列寄存器操作02RCC时钟配置对于STM32F0系列的RCC时钟配置,以下是一个超过1200字的例子:RCC(Reset and Clock Control)是用于配置和控制STM32F0系列微
控制器的时钟的模块。

时钟系统对于微控制器的运行非常重要,因为它影
响到系统的性能、功耗和稳定性。

在使用STM32F0系列微控制器时,首先需要配置RCC模块的寄存器,
以确定各种时钟源的频率、分频系数和使能状态。

以下是配置RCC模块的步骤:
1.选择系统时钟源:RCC_CFGR寄存器用于选择系统时钟源。

主要的
时钟源有内部高速时钟HSI(高速内部),外部晶体时钟HSE(高速外部),外部低速时钟LSI(低速内部)和外部低速时钟LSE(低速外部)。

可以使用RCC_CFGR寄存器的SW位域来选择时钟源。

2.设置时钟频率和分频系数:根据应用的需求,可以设置时钟的频率
和分频系数。

RCC_CFGR寄存器的HPRE、PPRE、和PLLMUL位域用于设置时
钟的分频系数。

同时,还可以使用RCC_CFGR2和RCC_CFGR3寄存器来设置PLL(锁相环)的输入时钟和分频因子。

3.使能时钟源:RCC_APB2ENR、RCC_APB1ENR和RCC_AHBENR寄存器用
于使能各个外设的时钟源。

可以使用这些寄存器的位域来控制外设时钟的
使能状态。

4.时钟安全配置:RCC_CFGR寄存器的MCO和MCOPRE位域用于配置主
要时钟输出的时钟安全特性。

可以设置MCO和MCOPRE位域来输出主时钟
信号、内部时钟信号或外部时钟信号。

配置完毕后,需要等待时钟系统配置完成。

通过读取RCC_CFGR寄存器的SWS位域,可以确保时钟系统配置已经生效。

一旦配置完成后,系统将按照配置的时钟源和频率来运行。

在使用STM32F0系列微控制器时,正确配置RCC时钟是非常重要的。

这样可以确保系统的稳定性、性能和功耗都能达到预期的要求。

通过操作RCC模块的相关寄存器,可以实现对时钟源和频率的灵活配置,以满足不同应用的需求。

同时,需要根据数据手册中的相关信息,仔细理解RCC模块的工作原理和寄存器的使用方法,以确保配置的正确性和有效性。

相关文档
最新文档