历史上的今天
今天是:2024年12月26日(星期四)
2018年12月26日 | STM32F1RCC时钟配置总结
2018-12-26 来源:eefocus
三种不同的时钟源可被用来驱动系统时钟(SYSCLK):
● HSI振荡器时钟
● HSE振荡器时钟
● PLL时钟
这些设备有以下2种二级时钟源:
● 40kHz低速内部RC,可以用于驱动独立看门狗和通过程序选择驱动RTC。 RTC用于从停机/
待机模式下自动唤醒系统。
● 32.768kHz低速外部晶体也可用来通过程序选择驱动RTC(RTCCLK)。
当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。
stm32单片机的将时钟信号(例如HSE)经过分频或倍频(PLL)后,得到系统时钟,系统时钟经过分频,产生外设所使用的时钟。
设置时钟流程:
1、将RCC寄存器重新设置为默认值 RCC_DeInit
2、打开外部高速时钟晶振HSE RCC_HSEConfig(RCC_HSE_ON);
3、等待外部高速时钟晶振工作 HSEStartUpStatus = RCC_WaitForHSEStartUp();
4、设置PLL RCC_PLLConfig
5、打开PLL RCC_PLLCmd(ENABLE);
6、设置系统时钟 RCC_SYSCLKConfig
7、设置AHB时钟 RCC_HCLKConfig;
8、设置低速速AHB时钟 RCC_PCLK1Config
9、设置高速AHB时钟 RCC_PCLK2Config;
10、等待PLL工作 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
11、判断是否PLL是系统时钟 while(RCC_GetSYSCLKSource() != 0x08)
12、打开要使用的外设时钟 RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()
void RCC_init(void)
{
RCC_ClocksTypeDef RCC_ClockFreq;
RCC_DeInit(); //1、将RCC寄存器重新设置为默认值
#ifdef ClockSource_HSE
/*-----------------------------------
优先选择外部时钟
------------------------------------*/
// Enable HSE
RCC_HSEConfig(RCC_HSE_ON); //2、打开外部高速时钟晶振HSE
// Wait till HSE is ready
if (RCC_WaitForHSEStartUp() == SUCCESS) //3、等待外部高速时钟晶振工作
{
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //使能或禁止预取缓存区,FLASH的读写均需要时间,设置等待周期是为了确保正确的读写。因为cpu的速度远远大于FLASH的操作速度。用库函数 FLASH_SetLatency(FLASH_Latency_2)来设置。3、开启FLASH预读缓冲功能,加速FLASH的读取。所有程序中必须的
/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2);
// PLLCLK = 8MHz * 9 = 72 MHz
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //4、设置PLL
// Enable PLL
RCC_PLLCmd(ENABLE); //5、打开PLL
// Select PLL as system clock source 72M //6、设置系统时钟
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//HCLK = SYSCLK AHB 72M //7、设置AHB时钟
RCC_HCLKConfig(RCC_SYSCLK_Div1);
// PCLK1 = HCLK/2 APB1 36M
RCC_PCLK1Config(RCC_HCLK_Div2); //8、设置低速速AHB时钟
// PCLK2 = HCLK APB2 72M
RCC_PCLK2Config(RCC_HCLK_Div1); //9、设置高速速AHB时钟
/* ADCCLK = PCLK2/4 */
RCC_ADCCLKConfig(RCC_PCLK2_Div4);
// Wait till PLL is ready
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //10、等待PLL工作
// Wait till PLL is used as system clock source
while (RCC_GetSYSCLKSource() != 0x08); //11、判断是否PLL是系统时钟
return;
}
#endif
/*-----------------------------------
内部HSI时钟选择
------------------------------------- */
RCC_HSICmd(ENABLE);
// 8M/2*9=36M
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_9);
// HCLK = SYSCLK AHB 36M
RCC_HCLKConfig(RCC_SYSCLK_Div1);
// PCLK1 = HCLK/2 APB1 36M
RCC_PCLK1Config(RCC_HCLK_Div1);
// PCLK2 = HCLK APB2 36M
RCC_PCLK2Config(RCC_HCLK_Div1);
// Enable PLL
RCC_PLLCmd(ENABLE);
// Wait till PLL is ready
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
// Select PLL as system clock source
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
// Wait till PLL is used as system clock source
while (RCC_GetSYSCLKSource() != 0x08);
RCC_GetClocksFreq(&RCC_ClockFreq);//查看频率值
}
下一篇:STM32之RTC原理
史海拾趣
|
在载波恢复中,根据DD、RC-DD、极性判决的算法得到的结果是相位,为什么在论文上都是通过环路滤波后得到频率差的曲线?似乎DD、RC-DD、极性判决的算法似乎可以鉴频,可是算法出来的结果确是相位呢?… 查看全部问答> |
|
更注重安全 一系列安全事故的发生,例如Sony电芯在Dell的笔记本上起火,知名手机厂商的手机电池相继爆炸等,中国政府发布了手机充电器强制性的法令。在半导体行业TI等相继发布侧重充电安全的保护芯片bq24316等,同时大幅提高了充电管理芯片的耐 ...… 查看全部问答> |
|
谁有tektronix泰克TDS 320 示波器中文使用说明啊,或者告诉我哪有下载?最近要用这个仪器,可我根本不会用啊,请大家帮帮我,在goole上也没搜到… 查看全部问答> |
|
程序加入数组_1BitFont 时,编译出现: #error clnk debug\\vl135.lkf:61 debug\\osd.o: symbol _1BitFont multiply defined (debug\\main.o)… 查看全部问答> |
|
由于成本、系统功耗和面市时间等原因,许多通讯、视频和图像系统已无法简单地用现有DSP处理器来实现,现场可编程门阵列(FPGA)尤其适合于乘法和累加(MAC)等重复性的DSP任务。本文从FPGA与专用DSP器件的运算速度和器件资源的比较入手,介绍FPGA在复数 ...… 查看全部问答> |
|
1、不熟悉FPGA的内部结构,不了解可编程逻辑器件的基本原理。 FPGA为什么是可以编程的?恐怕很多菜鸟不知道,他们也不想知道。因为他们觉得这是无关紧要的。他们潜意识的认为可编 ...… 查看全部问答> |




