论坛» 嵌入式开发» MCU

STM32进阶学习——系统时钟的配置

院士
2015-08-09 21:58 1楼

大家都知道,嵌入式硬件的启动第一步肯定是时钟。就像人类的心脏一样,必须先有心跳,才会有以后的吃、喝、玩、乐。我们的stm32f030也是一样的。

ST官方给出了如何配置外置无源晶振的示例——本人觉得非常不方便学习。一来是通过寄存器的方式来编写的,不利于新手们去学习,去理解。另一方面,也不利于我们平时快速的移植。

在进阶的学习中,我们放弃官方原有的时钟启动方式,使用库函数的方式来配置系统时钟,并且,我们使用内置的HIS时钟。这样,不仅非常有利于我们学习,而且更适合我们小型化低成本的要求。

在这里,楼主贴出来HIS时钟初始化的伪代码,希望网友们多来参与并实现。

P.S.回帖上传源代码的网友是有积分相赠的哟~~


Void HIS时钟配置函数(void) { 复位RCC时钟; 使能HIS时钟; 查询HIS时钟标志位; If(HIS时钟使能) { 使能FLASH_PrefetchBufferCmd; 设置FLASH_SetLatency; 配置HCLK; 配置PCLK2; 主时钟选择HIS; 等待主时钟稳定; } Else { 主时钟启动失败,在这里处理错误信息; } }




菜鸟
2015-08-09 22:01 2楼

我这里有现成的源代码,可以与大家分享一下的。

void HSIClockInit(void) { ErrorStatus HSIStartUpStatus; /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/ /* RCC system reset */ RCC_DeInit(); /* Enable HSI */ RCC_HSICmd(ENABLE); /* Wait till HSI is ready */ HSIStartUpStatus = RCC_GetFlagStatus(RCC_FLAG_HSIRDY); if (HSIStartUpStatus == SET) { /* Enable Prefetch Buffer */ FLASH_PrefetchBufferCmd(ENABLE); /* Flash 2 wait state */ FLASH_SetLatency(FLASH_Latency_0); /* HCLK = SYSCLK 8MHz */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */ RCC_PCLKConfig(RCC_HCLK_Div1); /* Select HSI as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); /* Wait till HSI is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x00) { } } else { /* If HSI fails to start-up, the application will have wrong clock configuration. User can add here some code to deal with this error */ /* Go to infinite loop */ while (1) { } } }

院士
2015-08-09 23:07 3楼

楼上挺棒的。

加积分 ~~

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]