| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> STM32学习笔记1:STM32 时钟系统 -> 正文阅读 |
|
[嵌入式]STM32学习笔记1:STM32 时钟系统 |
本文仅为学习笔记,内容大量参考《STM32F1开发指南-库函数版本_V3.3》
(1)
为什么
STM32
要有多个时钟源呢?
STM32
的时钟系统比较复杂,不像简单的
51
单片机一个系统时钟就可以解决一切。
采用一个系统时钟不是很简单吗?为什么
STM32
要有多个时钟源呢?
因为并不是所有外设都需要系统时钟这么高的频率,比如看门狗以及 RTC 只需要几十 k 的时钟即可。同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也会越弱,所以对于较为复杂的 MCU 一般都是采取多时钟源的方法来解决这些问题。
(2)
STM32时钟源
五个时钟源,分别为
HSI
、
HSE
、
LSI
、
LSE
、
PLL
。
①、
HSI
是高速内部时钟,
RC
振荡器,频率为
8MHz
。
②、
HSE
是高速外部时钟,可接石英
/
陶瓷谐振器,或者接外部时钟源,频率范围为
4MHz~16MHz
。我们的开发板接的是
8M
的晶振。
③、
LSI
是低速内部时钟,
RC
振荡器,频率为
40kHz
。独立看门狗的时钟源只能是
LSI
,同
时
LSI
还可以作为
RTC
的时钟源。
④、
LSE
是低速外部时钟,接频率为
32.768kHz
的石英晶体。这个主要是
RTC
的时钟源。
⑤、
PLL
为锁相环倍频输出,其时钟输入源可选择为
HSI/2
、
HSE
或者
HSE/2。倍频可选择2~16
倍,但是其输出频率最大不得超过
72MHz
。
(3)5 个时钟源是怎么给各个外设以及系统提供时钟的呢?
A. MCO 是
STM32
的一个时钟输出
IO(PA8)
,它可以选择一个时钟信号输出,可以选择为 PLL
输? ? ? ?出的
2
分频、
HSI
、
HSE
、或者系统时钟。这个时钟可以用来给外 ?部其他系统提供时钟源。
B. 这里是 RTC
时钟源,从图上可以看出,
RTC
的时钟源可以选择
LSI
,
LSE
,以及HSE 的
128? ? ? ? ??
分频。
C. 从图中可以看出 C
处
USB
的时钟是来自
PLL
时钟源。
STM32
中有一个全速功能的 USB
模? ? ? ? ? ?块,其串行接口引擎需要一个频率为
48MHz
的时钟源。该时钟源只能从 PLL
输出端获取,可? ? ? ?以选择为
1.5
分频或者
1
分频,也就是,当需要使用
USB模块时,PLL
必须使能,并且时钟频? ? ? ?率配置为
48MHz
或
72MHz
。
D. D 处就是
STM32
的系统时钟
SYSCLK
,它是供
STM32
中绝大部分部件工作的时钟源。系统? ? ? ? ?时钟可选择为 PLL
输出、
HSI
或者
HSE
。系统时钟最大频率为
72MHz
,当然你也可以超频,? ? ? ?不过一般情况为了系统稳定性是没有必要冒风险去超频的。
E. 这里的 E
处是指其他所有外设了。从时钟图上可以看出,其他所有外设的时钟最 终来源都是? ? ? ? ? ?SYSCLK
。
SYSCLK
通过
AHB
分频器分频后送给各模块使用。这些 模块包括:
? ? ? ? ①、
AHB
总线、内核、内存和
DMA
使用的
HCLK
时钟。
? ? ? ? ②、通过
8
分频后送给
Cortex
的系统定时器时钟,也就是
systick
了。
? ? ? ? ③、直接送给
Cortex
的空闲运行时钟
FCLK
。
? ? ? ? ④、送给
APB1
分频器。
APB1
分频器输出一路供
APB1
外设使用
(PCLK1
,最大频率? ? ? ? ? ? ? ? ? ? ? ? ? ?36MHz)
,另一路送给定时器
(Timer)2
、
3
、
4
倍频器使用。
? ? ? ? ⑤、送给
APB2
分频器。
APB2
分频器分频输出一路供
APB2
外设使用
(PCLK2
,
? ? ? ? ? ? ? ? 最大频率
72MHz)
,另一路送给定时器
(Timer)1
倍频器使用。
?
其中需要理解的是
APB1
和
APB2
的区别,
APB1
上面连接的是低速外设,包括电源接口、
备份接口、
CAN
、
USB
、
I2C1
、
I2C2
、
UART2
、
UART3
等等,
APB2
上面连接的是高速外设包
括
UART1
、
SPI1
、
Timer1
、
ADC1
、
ADC2
、所有普通
IO
口
(PA~PE)
、第二功能
IO
口等。居宁
老师的《稀里糊涂玩
STM32
》资料里面教大家的记忆方法是
2>1
,
APB2
下面所挂的外设的时
钟要比
APB1
的高。
(4)为什么使用外设时需要先使能对应的时钟?
在以上的时钟输出中,有很多是带使能控制的,例如
AHB
总线时钟、内核时钟、各种
APB1
外设、
APB2 外设等等。当需要使用某模块时,记得一定要先使能对应的时钟。
(5)设置时钟要做到心中有数
STM32
时钟系统的配置除了初始化的时候在
system_stm32f10x.c
中的
SystemInit()
函数中外,其他的配置主要在 stm32f10x_rcc.c
文件中,里面有很多时钟设置函数,大家可以打开这个文件浏览一下,基本上看看函数的名称就知道这个函数的作用。在大家设置时钟的时候,一定要仔细参考 STM32
的时钟图,做到心中有数。这里需要指明一下,对于系统时钟,默认情况下是在 SystemInit
函数的
SetSysClock()
函数中间判断的,而设置是通过宏定义设置的。
总结:就是要对时钟系统有个大致的认识,实际应用时若是有涉及,一定要参考时钟图,做到心中有数。
|
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/29 8:31:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |