| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 深入浅出地了解STM32中的时钟树 -> 正文阅读 |
|
[嵌入式]深入浅出地了解STM32中的时钟树 |
深入浅出地了解STM32中的时钟树1 本文的目标?弄明白下面这个图,也就是时钟树 2 到底什么是时钟信号?可以这么说: ?时钟信号是一种特殊类型的信号,它在高低状态之间振荡,并像节拍器一样被用来协调电路的动作。 3 时钟信号是怎么产生的??之前写的这篇文章,略有设计:在 keil 建立基于STM32开发的工程模板–详细步骤 4 时钟信号有几类STM32Fl03 相关时钟 可以分为以下 3 种: 4.1 输入时钟?STM32Fl03 的 输入时钟可以来自不同的时钟源。 ?低速时钟仅为实时时钟 (Real Time Clock, RTC) 和独立看门狗(Independent Watch Dog, IWDG)提供时钟信号。 ?从芯片角度来分,可以分为内部时钟(片内时钟)和外部时钟源(片外时钟)。内部时钟由芯片内部 RC振荡器产生,起振较快,因此系统主时钟在芯片刚上电时默认采用内部高速时钟。而外部时钟通常由外部晶振输入,在精度和稳定性上都具有很大的优势。 (1)高速外部时钟?高速外部时钟 (High Speed External clock signal, HSE)通常以外部晶振作为时钟源,晶振频 率可取范围为 4 ~ 16MHz, ST 官方推荐选取 8MHz 外接晶振作为 ?下面即以外接8MHz晶振作为高速外部时钟为例,沿着下图的STM32F103时钟树,介绍STM32F103的时钟系统是如何从高速外部时钟(8MHz晶振)开始一步步得到系统时钟SYSCLK。 OSC_IN 和 OSC_0UT : 从最左端的 osc_IN 和 OSC_ OUT 开 始, PLLXTPRE: 8M 的 HSE 遇到多路选择器 PLLXTPRE(HSE divider for PLL entry)。 通过编程配置寄存器,可以选择 PLLXTPRE的输出 : 对输入时钟的二分频或不分频。 通常选择不分频,因此,经过 PLLXTPRE 后,输出仍然是 8MHz 的时钟信号。 PLLSRC: 8MHz的HSE遇到多路选择器PLLSRC (PLL entry clock source)。 同 PLL: 8MHz的HSE遇到锁相环CPLL ),经过PLL 后,输出时钟称为PLLCLK。 通 SW: 72MHz的PLLCLK遇到多路选择器SW。 通过配置寄存器,可以选择SW输 (2) 高速内部时钟高速内部时钟(High Speed Internal clock signal, HSI)由片内RC振荡器产生,频率 (3)低速外部时钟低速外部时钟(Low Speed External clock signal , LSE)通常以外部晶振作为时钟源, (4) 低速内部时钟低速内部时钟(Low Speed Internal clock signal, LSI)由片内RC振荡器产生,可以 4.2 系统时钟?从上可知,系统时钟SYSCLK 由多路选择器SW根据用户设置选择PLLCLK、HSE或HSI中的一路输出而得。 SYSCLK的最高频率可达72MHz(通常也工作在72MHz), 是STM32Fl03大部分 部件的时钟来源。 ?通常,STM32Fl03从上电开始 ,选用HSI作为初始的系统时钟。 在完成初始化后,一般选用更加稳定可靠的HSE作为系统时钟的来源。为了让用户能够实时检测时钟系统是否运行正常,ST 在STM32Fl03 系列微控制器上专门提供了引脚MCO(M ai nC lock Output,主时钟输出)。 用户可以通过软件编程,选择SYSCLK、PLLCLK、HSE或HSI中的一路在MCO上输出。 4.3 其他时钟?系统时钟SYSCLK 经过AHB预分频器输出到STM32Fl03的各个部件: ?(1)HCLK: 高速总线AHB的时钟,由系统时钟SYSCLK 经AHB预分频器后直接得到。 通常, 将AHB预分频系数设置为1,HCLK即 为72MHz,最高 也为72MHz。 HCLK为Cortex-M3内核存储器和DMA提供时钟信号。 它 是Cortex-M3内核的运行时钟。 由此可见, CPU主频就是这个时钟信号。 通常情况下 CPU运行于 高 , STM32Fl03的频率72MHz。 ?(2)FCLK: Cortex-M3内核的 “自由运行” 时钟,同样由系统时钟SYSCLK经AHB预分频器后直接得到。 它与HCLK互相同步,最大 也 是72MHz。 所谓的不来自 HCLK 。 因 此在HCLK停止时FCLK仍能继续运行。 这样 ,可以保证即使在Cortex-M3内核睡眠时也能采样到中断和跟踪休眠事件。 ?(3)PCLK1: 外设时钟,由系统时钟SYSCLK经AHB预分频器,再经APBl预分频器后得到。 通常情况下,将AHB的预分频系数设置为1,将APB1 的预分频系数设置为2, PCLK1 即为36MHz,它的最大频率也为36MH 。 PCLK1为挂载在APB1 总线上的外设提供时钟信号,如USART2、USART3、UART4、UART5、SPI2/I2S、SPI3/I2S、I2C1、I2C2、USB、RTC、CAN、DAC、PWR、BKP、IWDG、WWDG等。类似地,如需使用以上挂载在APB2总线上的外设,必须先开启APB2总线上该外设的时钟。 ?(4)PCLK2: 外设时钟,由系统时钟SYSCLK经AHB预分频器,再经APB2预分频器后得到。 通常情况下 ,将AHB预分频系数和APB2的预分频系数都设置为1,PCLK2即为72MHz,它的最大频率也为72MH 。PCLK2为挂载在APB2总线上的外设提供时钟信号,如GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG、USART1、SPI1、EXTI、AFIO等。 尤其需要注意的 是,如需使用以上 挂载在APB2总线上的外设 ,必须先开启APB2总线上该外设的时钟。 ?(5)SDIOCLK: SDIO外设的时钟,由系统时钟SYSCLK经AHB预分频器后直接得 ?(7)STCLK: 系统定时器 SYSTICK的外部时钟源,由系统时钟SYSCLK 经 AHB 预分频器,再经过 8分频后得到, 等千HCLK/8。除了外部时钟源 STCLK , 系 统定时器SYSTICK还可以将FCLK作为内部时钟源 。 ?(8)TIMXCLK: 定时器 2到定时器 7的内部时钟源,由APBl总线上的时钟PCLK1 经 ?(9)TIMxCLK: 定时器 1和定时器8的内部时钟源,由APB2总线上的时钟PCLK2经 ?(10)ADCCLK : ADC1、ADC2、ADC3的时钟, 由APB2总线上的时钟 PCLK2 经 ADC 预分频器得到。 ADCCLK最大为14MHz。 5 why so complication??最后,为什么STM32Fl03的时钟系统 会显得如此复杂呢?因为有倍频、分频和一系列外设时钟的开关。 首先,倍频是考虑到电磁兼容性,如果直接外接一个 72MHz的晶振, 过高的振荡频率会给制作电路板带来难度。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
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年11日历 | -2024/11/25 22:28:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |