当前位置:网站首页>STM32F407时钟树与系统时钟学习笔记
STM32F407时钟树与系统时钟学习笔记
2022-06-10 12:06:00 【闪电️】
STM32F407时钟树
1、 时钟树简介
从图中可以看出STM32有四个时钟源和锁相环倍频输出时钟:分别是:
1、HSE:高速外部时钟
高速外部时钟信号 (HSE) 有 2 个时钟源:(1) HSE 外部晶振/陶瓷谐振器、(2)HSE 外部用户时钟
2、HSI:高速内部时钟
HSI 时钟信号由内部 16 MHz RC 振荡器生成,可直接用作系统时钟,或者用作 PLL 输入。
3、LSE:低速外部时钟
LSE 晶振是 32.768 kHz 低速外部 (LSE) 晶振或陶瓷谐振器,可作为实时时钟外设 (RTC) 的时钟源来提供时钟/日历或其它定时功能,具有功耗低且精度高的优点。
4、LSI:低速内部时钟
LSI RC 可作为低功耗时钟源在停机和待机模式下保持运行,供独立看门狗 (IWDG) 和自动唤醒单元 (AWU) 使用。时钟频率在 32 kHz 左右。有关详细信息,请参见数据手册的电气特性部分。
5、PLL:倍频输出时钟
(1)主 PLL(PLL)由 HSE 或者 HSI 提供时钟信号(通过选择器),并具有两个不同的输出时钟。主PLL时钟计算方式:PLL=8MHz * N/ (MP)=8MHz 336 /(8*2) = 168MHz (就是分频和倍频:外部晶振选择 8MHz M=8,倍频器倍频系数 N=336,分频器分频系数 P=2 )第一个输出 PLLP 用于生成高速的系统时钟(最高 168MHz)第二个输出 PLLQ 用于生成 USB OTG FS 的时钟(48MHz),随机数发生器的时钟和 SDIO时钟
(2)专用 PLL(PLLI2S)用于生成精确时钟,从而在 I2S 接口实现高品质音频性能
从图上还可以看出STM32F407还具有向外输出时钟的两个口分别是:STM32时钟信号输出MCO1(PA8)和MCO2 (PC9)
1、MCO1用户可通过可配置的预分配器(从 1 到 5)向 MCO1 引脚 (PA8) 输出四个不同的时钟源:
HSI 时钟、LSE 时钟、HSE 时钟、PLL 时钟
所需的时钟源通过 RCC 时钟配置寄存器 (RCC_CFGR) 中的 MCO1PRE[2:0] 和 MCO1[1:0]位选择。
2、MCO2用户可通过可配置的预分配器(从 1 到 5)向 MCO2 引脚 (PC9) 输出四个不同的时钟源:
HSE 时钟、PLL 时钟、系统时钟 (SYSCLK)、PLLI2S 时钟
所需的时钟源通过 RCC 时钟配置寄存器 (RCC_CFGR) 中的 MCO2PRE[2:0] 和 MCO2位选择。
对于不同的 MCO 引脚,必须将相应的 GPIO 端口在复用功能模式下进行设置。MCO 输出时钟不得超过 100 MHz(最大 I/O 速度)
2、 时钟配置:
1、对于HSI、HSE、PLL等时钟源配置,没有专门的固件库函数,可以通过SystemInit函数来操作配置。该函数具体实现过程如下(也可以根据寄存器自己操作):
(1)、系统复位之后,先调用SystemInit函数,该函数的作用是初始化系统时钟,设置PLL等
(2)、打开HSE,等待其稳定,
(3)、设置AHB、APBx、等分频系数
(4)、设置HSE为主PLL时钟源,并且配置主PLL里面的分频和倍频参数,然后产生PLLCLK并将其使能,并选择系统时钟(SYSCLC)为PLLCLK
2、初始化之后的状态
SYSCLK(系统时钟) =168MHZ
AHB总线时钟(HCLK=SYSCLK)=168MHZ
APB1总线时钟(PCLK1=SYSCLK/4)=42MHZ
APB2总线时钟(PCLK2=SYSCLK/2)=84MHZ
PLL主时钟 =168MHZ
初始化之后可以通过变量SystemCoreClock获取系统变量,如果SYSCLK=168MHZ,那么变量等于168000000
系统复位后先调用的是SystemInit函数,其次是main函数,这一点在启动文件里面写了。
3、SysTick(系统定时器)的使用方法
简介:该定时器寄存器,24位,只能递减,该寄存器存在于内核,嵌套在NVIC中,所有的Cortex-M内核单片机都具有该定时器。SysTick_Config(uint32_t ticks)初始化函数位于Core_cm4.h中,计数器每计数一次的时间为 1/SYSCLK,一般我们设置
系统时钟 SYSCLK 等于 168M。
调用Systick定时器,只需要调用SysTick_Config(uint32_t ticks)函数,向函数中写入初始值,如果时钟源选择的是AHB=168MHZ,那么,每递减一次的时间就是1/168M,需要多少时间就设多大初始值。当递减到零时会产生异常请求(中断)具体代码应用如下:
__IO u32 TimingDelay;//防止编译器优化的变量
void SysTick_Init(void)
{
if(SysTick_Config(SystemCoreClock / 1000))//设置初始值为168 000 000/1000=168 000=1ms
{
while(1);
}
}
//ms延时程序
void Delay_ms(__IO u32 nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
//中断服务函数调用该函数,每进一次中断,数值减一,每一毫秒进一次中断。
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
调用一个 Delay_ms(1000); 函数,延时时间为1000*1ms。TimingDelay的初始值被设为1000,随着定时器数值每次递减,进入中断使得TimingDelay递减,当TimingDelay递减到0时,延时函数才会被释放。执行下一步。
边栏推荐
- 移动端整页滑屏示例(上下滑动整屏)(整理)
- "Yi +" open source program - Design and practice of low delay player based on webrtc
- Mysql8.0 installation
- 【总结向】个人赛补题 POJ - 3041 Asteroids &CodeForces - 173B Chamber of Secrets
- print(net) vs. net. parameters vs. net. named_ parameters
- Remote access to tensorboard
- 【必备】,真题解析
- [Yan Xuan], real problem analysis
- 入门篇:从 etcd 名字的由来,到安装部署和使用姿势
- 向上滑动导航固定头部
猜你喜欢

ZipOutputStream使用

(八)初始化列表

ShaderGraph——303摇曳的小草

【已解决】vagrant up下载box速度太慢的解决方法

国际档案日|瀚高数据库以科技赋能数字档案建设

The essence of linear algebra 4 matrix multiplication and linear compound transformation

Lufax: external technology output enables financial enterprises to achieve independent and controllable database
![[Yan Xuan], real problem analysis](/img/14/940cff2216db90f469910d13b823a8.png)
[Yan Xuan], real problem analysis

SQL Server AlwaysOn viewing data synchronization progress
![[limited time], full of dry goods](/img/35/c3ce6aa789f83d4082851f8a581f5f.png)
[limited time], full of dry goods
随机推荐
ShaderGraph——水面
Do you have an online stock account? Is it safe to open an account online?
The securities and futures industry meets the new data regulation, and IP guard helps improve data security management
Introduction: from the origin of etcd name to installation, deployment and usage posture
Is it safe to open an account in qiniu
Transfomer各组件与Pytorch
Surrender firehouse database access: Twitter is ready to meet Musk's requirements
web服务器开发,小型公司web开发
list.remove(index)返回flase,移除失败
并发bug之源(一)-可见性
Tmux使用
遍历未知类型对象属性
"Forget to learn again" shell Basics - 29. Awk built-in variables
Before we learn about high-performance computing, let's take a look at its history
mysql8.0安装
Pytorch tensor高阶操作
print(net) vs. net. parameters vs. net. named_ parameters
Driver.js - 开源无依赖的 web 新手交互引导工具库,功能强大、高度可定制
[required] analysis of the real problem
Yet Another Palindrome Partitioning