STM32 时钟
来源:互联网 发布:bec中级用书 知乎 编辑:程序博客网 时间:2024/05/06 22:28
stm32时钟树基础讲解
先来说明两个概念
主干假设外部使用8M晶振作为stm32时钟输入源,则这个8M就是主干
分支 最终的外部设备,比如GPIO
我们来分析一条时钟脉络
3 - 5 -7 - 21- 8- 9 11- 13
3 首先外部8M晶振输入
5 PLL 选择位 作用为选择后续PLL分支的输入时钟(假设选择外部晶振)
7 设置外部时钟分频(假设1分频)
21 选择PLL倍频时钟,(假设选择分频后的外部时钟)
8 设置PLL倍频(假设设置9倍)
9 选择系统时钟源(假设选择经过PLL倍频过的时钟)
11 设置AHB分频(假设设置1分频)
13 时钟到达AHB总线
我们在来分析3 5 7 21 8 9 11 15 16
对于3首先是外部8M晶振输入
对于5 通过PLL选择位于选择后续PLL分支的输入时钟(假设选择外部晶振)
对于7设置外部晶振的分频数(假设1分频)
21选择倍频时钟源(假设选择经过分频后的外部时钟)
8 设置PLL倍频数,设置9倍频
9 选择系统时钟源(假设选择经过PLL倍频后的时钟)
11 设置AHB总线分频数(假设1分频)
15 设置APB2总线分频(假设1分频)
16 到达APB2总线
现在来分析一下程序
void RCC_Configuration(void)
{
ErrorStatus HSEStaruUpStatus; 1
RCC_DeInit(); 2
RCC_HSEConfig(RCCC_HSE_ON); 3
HSEStaruUpStatus = RCC_WaitForHSEStartUp() 4
if(HSEStaruUpStatus == SUCCESS)
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
FLASH_SetLatency(FLASH_Latency_2);
FLASH_PresetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08);
}
}
1 定义一个ErrorStatus类型的变量HSEStartUpStatus.
2 将时钟树复位致默认设置
3 开启HSE晶振
4 等待HSE稳定,并将起振结果保存到HSEStartUpStatus变量中
5 判断HSE晶振是否起振陈功,成功啦进入if内部
6
- STM32 时钟
- stm32 时钟
- stm32时钟
- stm32时钟
- stm32时钟
- stm32时钟
- STM32时钟
- STM32 时钟
- STM32时钟
- stm32时钟
- stm32时钟
- STM32时钟
- stm32时钟
- STM32-时钟
- 【时钟树】stm32时钟分析
- STM32学习----时钟
- stm32下的时钟
- STM32的时钟系统分析
- nyoj45 棋盘覆盖
- MFC消息机制+UI线程和工作线程+模式对话框原理
- keil RealViewMDK STM32F10x.s启动流程分析
- 自定义布局实现左右或者上下翻页效果(借助Scroller类)
- 二分查找时mid的计算方法
- STM32 时钟
- HTML第8章上机练习1
- Android——InputStream&OutputStream
- 关于linux下fork()的底层实现(详解)
- Linux中的文件锁
- Spring Boot——开发新一代Spring应用
- javascript实现计数器理解this作用域
- php获取文件后缀名的几种方法
- securecrt常用快捷键