【STM32F103攻城笔记】内部晶振HSI倍频设置系统时钟

发布者:知识的海洋最新更新时间:2019-08-24 来源: eefocus关键字:STM32F103攻  内部晶振  HSI倍频  系统时钟 手机看文章 扫描二维码
随时随地手机看文章

首先说明,因为STM32芯片的型号不同,所以对于不同芯片有不同频率的限制,比如某些时钟频率不能大于多少,这是根据手册来设置的!但改变频率的寄存器都一样,只是我们设置频率大小要受芯片的限制!下面我用的芯片型号是STM32F103VBT6!它就限制了内部晶振的倍频不能大于64MHz(但其实我实验出来是52MHz)!


本文是利用内部晶振(HSI)来倍频,与外部晶振倍频区分开!


第一步:打开system_STM32f10x.c,找到函数void SystemInit (void){},把原有的都注释掉,将下面的代码复制进去:


                 /* 开启HSI 即内部晶振时钟 */

RCC->CR |= (uint32_t)0x00000001; 


/*选择HSI为PLL的时钟源HSI必须2分频给PLL*/

RCC->CFGR |= (uint32_t)RCC_CFGR_PLLSRC_HSI_Div2; 


         

/*PLLCLK=8/2*13=52MHz   设置倍频得到时钟源PLL的频率*/

RCC->CFGR |= (uint32_t)RCC_CFGR_PLLMULL13;


/* PLL不分频输出  */

RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

 

/* 使能 PLL时钟 */

RCC->CR |= RCC_CR_PLLON;


/* 等待PLL时钟就绪*/

while((RCC->CR & RCC_CR_PLLRDY) == 0)

{

}



/* 选择PLL为系统时钟的时钟源 */

RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));

RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    


/* 等到PLL成为系统时钟的时钟源*/

while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)

{


                }


这段代码其实就是是HSI倍频成为PLL的时钟源,又使PLL成为系统时钟的时钟源,这样就相当于HSI倍频后给系统时钟了!




最后我用一个库函数RCC_GetClocksFreq() 它是用来获取各个时钟的频率的!他要先初始化,就在开始前利用RCC_ClocksTypeDef 来使他初始化,我们代码是RCC_ClocksTypeDef  RCC_Clocks,这样RCC_Clocks.SYSCLK_Frequency就是系统时钟的频率了!我们串口输出就可以了!

主函数代码:


int main (void)

{

       RCC_ClocksTypeDef  RCC_Clocks; //初始化



       SystemInit(); //调用刚才改过的函数



NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

Usart_Init(115200); //串口为了看数据而已


RCC_GetClocksFreq(&RCC_Clocks); //获取各个时钟频率



while(1)

{

printf("SYSCLK_Frequency %d rn",RCC_Clocks.SYSCLK_Frequency);

//printf("SYSCLK_Frequency %d rn",RCC_Clocks.SYSCLK_Frequency);

}


}




串口显示:(我的实验利用内部晶振最高只能倍频到52MHz)


关键字:STM32F103攻  内部晶振  HSI倍频  系统时钟 引用地址:【STM32F103攻城笔记】内部晶振HSI倍频设置系统时钟

上一篇:STM32F103 系统各部分时钟设置
下一篇:stm32时钟选择与配置HSL HSE PLL

推荐阅读最新更新时间:2024-10-31 10:03

STM32笔记(四)---配置系统时钟实验
配置系统时钟实验 1 使用 HSE 一般情况下,我们都是使用 HSE,然后 HSE 经过 PLL 倍频之后作为系统时钟。 通常的配置是: HSE=8M, PLL 的倍频因子为: 9,系统时钟就设置成:SYSCLK = 8M * 9 = 72M。使用 HSE,系统时钟 SYSCLK 最高是128M(16倍频)。 当程序来到 main 函数之前,启动文件: statup_stm32f10x_hd.s 已经调用 SystemInit()函数把系统时钟初始化成 72MHZ, SystemInit()在库文件: system_stm32f10x.c 中定义。如果我们想把系统时钟设置低一点或者超频的话,可以修改底层的库文件,但是为了维
[单片机]
MSP430之系统时钟
一、时钟源种类 LFXT1CLK低频时钟源——MSP430每一种器件都有 XT2CLK高频时钟源——存在于X13X、X14X、X15X、X16X、X43X、X44X等 DCOCLK数字控制RC振荡器 二、时钟源说明 ACLK辅助时钟:ACLK是LFXT1CLK(低频时钟源)信号经过1、2、4、8分频得到的。ACLK可由软件选为各个外围模块的时钟信号,一般用于低速外设。 MCLK系统主时钟:MCLK可由软件选择来自LFXT1CLK(低频时钟源)、XT2CLK(高频时钟源)、DCOCLK(数字控制RC振荡器)三者之一,然后经过1、2、4、8分频得到。MCLK主要用于CPU和系统。 SMCLK子系统时钟:可由
[单片机]
MSP430之<font color='red'>系统</font><font color='red'>时钟</font>
MSP430x14x之BCS -----基本时钟系统
MSP430F169的时钟源有三: 高速晶体振荡器XT2、低速晶体振荡器XT1、数字控制振荡器DCO。各振荡器产生的时钟信号可由软件分配到ACLK,MCLK,SMCLK三路重要的时钟信号通道。 单片机的频率:高频率,低频率,稳定频率。 ACLK的时钟只能来自XT1 MCLK的时钟能来自XT1,XT2,DCO SMCLK的时钟能来自XT2,DCO XT1和DCO振荡器上电即启动,XT2振荡器需要操作XT2OFF方能启动。上电复位后默认XT2关,ACLK来自XT1,MCLK和SMCLK都来自DCO。 当振荡器失效后,我们要检查失效标志,注意要延迟一段时间,再检查失效标志,因为振荡器起振需要一段毫秒级的时间。 基
[单片机]
STM32时钟系统 时钟设置
在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 ①HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 ③LSI是低速内部时钟,RC振荡器,频率为40kHz。 ④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。 ⑤PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。 在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法 如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于1
[单片机]
STM32<font color='red'>时钟</font><font color='red'>系统</font> <font color='red'>时钟</font>设置
NEC V850 之 系统时钟内部设备时钟
首先说明下,之前没有搞时钟就开始看I/O口还有外部中断是不对的。幸好发现的不晚,现在把这必须的一课给补上。如果连时钟都搞不明白,下面的外设是肯定没法弄的。另外放弃了原来做一个总体程序包的想法,主要是太浪费时间了,完成一个器件的驱动还要想把他无缝的添加到原来的程序结构里去,现在不是做这个工作的时候,需要快速的把测试完成,然后上系统去调试。 下面开始正题,V850的时钟还是比较饶人的,需要仔细的去读datasheet,另外我到现在还有无法理解的地方在datasheet上面。下图是系统时钟的框图:(红色的圈里就是不理解的地方,不知道在哪个地方设置) 下面我会把代码和示波器测量的截图发出来。先是代码: 代码出处 system.
[单片机]
NEC V850 之 <font color='red'>系统</font><font color='red'>时钟</font>及<font color='red'>内部</font>设备<font color='red'>时钟</font>
STM32 SysTick 系统时钟 超简易定时器SysTick
/** * @brief Configures the SysTick. 系统时钟配置函数 main.c * @param None * @retval None */ void SysTick_Configuration(void) { /* Setup SysTick Timer for 100 msec interrupts */ if (SysTick_Config((SystemCoreClock) / 10)) // 1/10s=100ms { /* Capture error */ while (1); } NVIC_SetPriority(SysTick_IRQn, 0x0); } /**
[单片机]
S3C2440—4.时钟系统
一.S3C2440时钟体系介绍 1.总线与时钟 S3C2440有俩个总线:AHB高速总线、APB外围总线。 对应三个时钟源: ARM芯片CPU的FCLK AHB总线的HCLK APB总线的PCLK 三个时钟的工作频率: (可以看出对比STM32中72MHz的频率,ARM时钟的性能有了很大的提高) 2.时钟来源 如何得到三种时钟?系统的时钟来源是12MHz的晶振,通过PLL锁相环硬件设备可以得到高达400MHz的时钟频率,其时钟框图如下: 可以看出系统时钟来源的选择有俩种: 晶振 外部输入 (这里只讨论晶振) 3.选择时钟 通过设置OM 可以选择时钟源: 设置方法如下: 打开原理图查看
[单片机]
S3C2440—4.<font color='red'>时钟</font><font color='red'>系统</font>
STM32的系统时钟与SystemInit函数
以上在stm32f4xx中文参考手册的截图 SYSCLK时钟的来源有3个分别是 HSI HSE PLL 我们主要的时钟有 低速的内部时钟 LSI RC震荡产生 32KHZ 低速的外部时钟 LSE 32.768KHZ晶振 高速的内部时钟 HSI RC震荡16MHZ 高速的外部时钟 HSE 一般为8Mhz 一般情况我们的SYSCLK时钟选择PLLCLK 看看我们的函数是怎么操作时钟分配的! 启动文件首先先配置时钟然后在运行用户主函数,打开SystemInit函数 ** * @brief Setup
[单片机]
STM32的<font color='red'>系统</font><font color='red'>时钟</font>与SystemInit函数
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved