STM32f1学习笔记——Stm32时钟说明

CPU时钟来源

振荡器

1、两个内部RC振荡器
a)内部高速振荡器(HSI)----> 8MHz
b)内部低速振荡器(LSI)----->32.768KHz:一般供给实时时钟与看门狗使用。

2、外部振荡器
a)高速外部振荡器(HSE OSC)----> <=25MHz:来源于石英/陶瓷共振体(该时钟波形可以为方波、正弦波或三角波,但必须为50%占空比)
b)低速外部振荡器(LSE OSC)---->典型值 32.768KHz:波形以及占空比与HSE同,LSE与LSI功能一样-给RTC以及IWDG使用,但它们都不是很准确,但是在设计实时时钟时一般采用LSE。

CPU时钟来源

CPU时钟可以来自HSI、HSE或者内部锁相环(PLL)。------>CPU可以不用在HSE下工作在最高频率,但是HSI不能准确且稳定地提供8MHz的时钟脉冲
无论使用哪种振荡源,都应该通过锁相环来产生最大频率供给CPU内核。
在产生复位操作后,STM32回首先使用HSI作为系统时钟,此时HSE处于关闭状态。要是STM32进入最高频率工作,首先就需要开启HSE并且等待其稳定。

/*
作者:Losingamong
时间:08/08/2008
*/
/*=定义枚举类型变量 HSEStartUpStatus*/
ErrorStatus HSEStartUpStatus;
/*复位系统时钟*/
RCC_DeInit();
/*开启HSE*/
RCC_HSEConfig(RCC_HSE_ON);
/*等待HSE起振并稳定*/
HSEStartUpStatus = RCC_WaitForHSEStartUp();
/*判断HSE是否起振成功,成功则进入配置环节*/
if (HSEStartUpStatus == SUCCESS )
{
	/*选择HCLK(AHB)时钟源为SYSCLK1分频*/
	RCC_HCLKConfig(RCC_SYSCLK_Div1);
	/*选择PCLK1时钟源为HCLK(AHB)的2分频*/
	RCC_PCLK1Config(RCC_HCLK_Div2);
	/*选择PCLK2时钟源为HCLK(AHB)的1分频*/
	RCC_PCLK1Config(RCC_HCLK_Div1);
	/*设置FLASH延时周期为2*/
	FLASH_SetLatency(FLASH_Latency_2);
	/*使能FLASH预取缓存*/
	FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
	/*选择锁相环(PLL)时钟源为HSE1分频,倍频数为9,则PLL输出频率为72MHz*/
	RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
	/*使能PLL*/
	RCC_PLLCmd(ENABLE);
	/*等待PLL输出稳定*/
	while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
	/*选择SYSCLK时钟源为PLL*/
	RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
	/*等待PLL成为SYSCLK的时钟源*/
	while(RCC_GetSYSCLKSource() != 0x08);
}
/*打开APB2总线上的GPIOA时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

说明:
在HSE激活之后,内部还需要通过AHB以及APB将时钟信号作用于不同的地方,所以在配置时钟的一般顺序是:
HSE->(PLL->SYSCLK)->AHB->APB(APB1,APB2)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值