找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 15629|回复: 1
打印 上一主题 下一主题
收起左侧

STM32学习-使用内部时钟HSI做为系统时钟

[复制链接]
跳转到指定楼层
楼主
ID:81272 发表于 2015-5-27 16:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在新做了块STM32的板子,有点儿悲摧,晶振还没有,但程序还是要调试的,所以考虑使用内部时钟HSI。

首先在主程序中注释掉SystemInit()
然后使用下面的函数做为系统时钟的初始化函数
void RCC_Configuration(void)
{
  RCC_DeInit();//将外设 RCC寄存器重设为缺省值

  RCC_HSICmd(ENABLE);//使能HSI  
  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET)//等待HSI使能成功
  {
  }

  if(1)
  {
    //FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
    //FLASH_SetLatency(FLASH_Latency_2);

    RCC_HCLKConfig(RCC_SYSCLK_Div1);   
    RCC_PCLK1Config(RCC_HCLK_Div2);
    RCC_PCLK2Config(RCC_HCLK_Div1);

    //设置 PLL 时钟源及倍频系数
    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_2);               
    //使能或者失能 PLL,这个参数可以取:ENABLE或者DISABLE
    RCC_PLLCmd(ENABLE);//如果PLL被用于系统时钟,那么它不能被失能
    //等待指定的 RCC 标志位设置成功 等待PLL初始化成功
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }

    //设置系统时钟(SYSCLK) 设置PLL为系统时钟源
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  
    //等待PLL成功用作于系统时钟的时钟源
    //  0x00:HSI 作为系统时钟
    //  0x04:HSE作为系统时钟
    //  0x08:PLL作为系统时钟  
    while(RCC_GetSYSCLKSource() != 0x08)
    {
    }
  }
}

当然这段程序是从网上找来的,做了适当的修改。背景设为绿色的部分已经注释掉的代码,可能跟库版本有关,先注释掉了,要不无法通过编译。
现在把程序的流程理一下

中间配置时钟的:
RCC_HCLKConfig(RCC_SYSCLK_Div1);   
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PCLK2Config(RCC_HCLK_Div1);
分别对应下图①②③标注的部分。RCC_HCLKConfig(RCC_SYSCLK_Div1)——表示AHB时钟为系统时钟SYSCLK;RCC_PCLK1Config(RCC_HCLK_Div2)——表示APB1时钟为HCLK/2,其中HCLK为AHB时钟;RCC_PCLK2Config(RCC_HCLK_Div1)——表示APB2时钟为HCLK.

设置PLL,对应图中红圈儿部分,设置PLL时钟源和倍频系统。
设置系统时钟,对应图中蓝圈部分。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:365788 发表于 2019-10-16 13:42 | 只看该作者
学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表