STM32使用内部时钟当系统时钟

本文介绍STM32F10系列微控制器在无外部晶振情况下,使用内部HSI作为PLL时钟源的配置方法。通过具体代码示例,详细解析了如何设置系统时钟达到40MHz,并讨论了HSI精度限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近刚开始接触STM32,因为项目中所使用的STM32没有外部晶振,再加上需要使用一些高频外设,所以说就只能使用内部的HSI作为PLL时钟源,作为系统时钟。下图为STM32F10时钟系统框图以及相应说明:

下面为我参考STM32相应资料所写的系统时钟的初始化函数:                                                                        

void RCC_Configuration(void)
{
    RCC_DeInit();                                      		//重设RCC寄存器为缺省值
    RCC_HSICmd(ENABLE);                                   	//使能HSI内部高速晶振
    while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);    	//等待使能成功
    
    //配置AHB时钟频率与系统时钟频率一致    
    RCC_HCLKConfig(RCC_SYSCLK_Div1);  

    //配置APB1低速时钟频率为AHB时钟频率的1/2                     	
    RCC_PCLK1Config(RCC_HCLK_Div2);  

    //配置APB2高速时钟频率与AHB时钟频率一致                      
    RCC_PCLK2Config(RCC_HCLK_Div1);  
                     	
    //配置ADC时钟频率为APB2时钟频率的1/4
    RCC_ADCCLKConfig(RCC_PCLK2_Div4);                      

    //将内部晶振时钟2分频后作为PLL时钟源,倍频系数为10(即系统时钟为40MHz)
    RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_10);   

    //使能PLL(如果PLL被用于系统时钟,那么它不能被失能)                
    RCC_PLLCmd(ENABLE);     

    //等待指定的RCC标志位设置成功,等待PLL初始化成功
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);  
 	
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);              //以PLL时钟作为系统时钟源

    //0x00:HSI作为系统时钟
    //0x04:HSE作为系统时钟
    //0x08:PLL作为系统时钟
    while(RCC_GetSYSCLKSource() != 0x08);          			//等待PLL时钟成功作为系统时钟源
}

最后补充:从STM32F10时钟系统框图及说明这个图中你可以看出,系统时钟的选择有三种,分别为HSI、HSE和PLL。如果选择了以HSI为PLL时钟源的PLL为系统时钟,频率是达不到72MHz的,最多就是 8MHz/2*16 = 64MHz。但是实际上,由于HSI内部RC振荡器精度不是很高,再加上也不是很稳定,所以建议如果选择PLL为系统时钟,且PLL时钟源为HSI,建议系统时钟设置不要超过50MHz。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值