这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » STM32进阶学习——系统时钟的配置

共3条 1/1 1 跳转至

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

院士
2015-08-09 21:58:05     打赏

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

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

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

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

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


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

 







关键词: STM32     进阶     时钟     配置    

菜鸟
2015-08-09 22:01:32     打赏
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:50     打赏
3楼

楼上挺棒的。

加积分 ~~


共3条 1/1 1 跳转至

回复

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