单片机
返回首页

stm32变更外部晶振时如何配置时钟、以及HSI的使用

2016-09-26 来源:eefocus

由于stm32的库默认是外部晶振8M的情况下实现的,所以配置串口波特率的时候也是按8M,包括主频。
如果采用外部晶振12M,配置时钟为72MHZ 。

1)PLL倍频这样改:
8M:
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);//8*9=72
12M:
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);//12*6=72
库函数:void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul)
例:RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6);

2)stm32f10x.h中修改:
8M:
#define HSE_Value ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ 
12M:
#define HSE_Value ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */
 
 
接下来说一下内部时钟,内部时钟是由RC振荡产生的,精度不高。用内部时钟产生的功耗更小,还可以节约印制板的空间,程序配置如下:
void RCC_Configuration(void)
{
        /* RCC system reset(for debug purpose) */
        RCC_DeInit();
 
        RCC_HSICmd(ENABLE);        //打开内部高速时钟
        //等待HSI准备好
        while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
 
        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);        //开启FLASH预取指功能
        //FLASH时序控制
        //推荐值:SYSCLK = 0~24MHz   Latency=0
        //       SYSCLK = 24~48MHz  Latency=1
        //       SYSCLK = 48~72MHz  Latency=2
        FLASH_SetLatency(FLASH_Latency_2);
        RCC_HCLKConfig(RCC_SYSCLK_Div1);        //设置HCLK(AHB时钟)=SYSCLK
        RCC_PCLK2Config(RCC_HCLK_Div1);                //PCLK2(APB2) = HCLK
        RCC_PCLK1Config(RCC_HCLK_Div1);                //PCLK1(APB1) = HCLK
 
        //PLL设置 SYSCLK/2 * 12 = 4*12 = 48MHz
        RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12);
        //启动PLL
        RCC_PLLCmd(ENABLE);//如果PLL被用于系统时钟,不能被DISABLE
        //等待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);
}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • CCD图像传感器在微光电视系统中的应用

  • 如何利用ESP8266制作一个简单的四轴飞行器

  • 非常简单的150W功放电路图

  • 基于IC555的可变PWM振荡器电路

  • 分享一个电网倾角计电路

  • 使用NE555和磁簧开关的橱柜照明电路

    相关电子头条文章