关于STM32时钟系统的学习。

首先了解一下STM32的结构和时钟总线。

/*******************************/

//

/
/
时钟树
/
*****************************/


在分析时钟树的时候,需要结合代码进行分析。
具体的关于时钟的代码在:"system_stm32f4xx.c"中。
其中有这样的一段描述:

Supported   STM32F40xxx   devices*-----------------------------------------------------------------------------*        System Clock source                    | PLL (HSE)*-----------------------------------------------------------------------------*        SYSCLK(Hz)                             | 168000000*-----------------------------------------------------------------------------*        HCLK(Hz)                               | 168000000*-----------------------------------------------------------------------------*        AHB Prescaler                          | 1 (高性能总线的预分频数)*-----------------------------------------------------------------------------*        APB1 Prescaler                         | 4*-----------------------------------------------------------------------------*        APB2 Prescaler                         | 2*-----------------------------------------------------------------------------*        HSE Frequency(Hz)                      | 25000000  (ST官方推荐的外部时钟是25M,不过很多的中国公司选用的是8M)*-----------------------------------------------------------------------------*        PLL_M                                  | 25   ( M是外部高速时钟, 刚进来时候分频的系数)*-----------------------------------------------------------------------------*        PLL_N                                  | 336  (M分频之后的,进来的倍数。)*-----------------------------------------------------------------------------*        PLL_P                                  | 2    (N倍频之后,再经过P分频,供给SYSclock 作为系统时钟)*-----------------------------------------------------------------------------*        PLL_Q                                  | 7    (这个时外设使能时钟,48M)*-----------------------------------------------------------------------------*        PLLI2S_N                               | NA   (以下带I2S标记的,高品质音频专用的时钟)*-----------------------------------------------------------------------------*        PLLI2S_R                               | NA*-----------------------------------------------------------------------------*        I2S input clock                        | NA*-----------------------------------------------------------------------------*        VDD(V)                                 | 3.3*-----------------------------------------------------------------------------*        Main regulator output voltage          | Scale1 mode*-----------------------------------------------------------------------------*        Flash Latency(WS)                      | 5*-----------------------------------------------------------------------------*        Prefetch Buffer                        | ON*-----------------------------------------------------------------------------*        Instruction cache                      | ON*-----------------------------------------------------------------------------*        Data cache                             | ON*-----------------------------------------------------------------------------*        Require 48MHz for USB OTG FS,          | Disabled*        SDIO and RNG clock                     |*=============================================================================*/

我们根据时钟树来分析,sysclock ,系统时钟是怎么来的 ?
HSI
HSE
LSI
LSE
PLL
在STM32中,一样的,都是由五个基本的时钟源来提供:
1.外部高速时钟:HSE(大多数的中国企业用的的8M的晶振)
2.内部高速时钟:HSI(RC振荡器,频率为16MHZ,可以直接作为系统时钟,或者PLL的输入)
3.外部低速时钟:LSE(频率为 32.768kHz 的石英晶体。 这个主要是 RTC 的时钟源)
4.内部低速时钟:(RC 振荡器,频率为 32kHz 左右。 供独立看门狗和自动唤醒单元使用)
5.PLL锁相环输出,(分为pllp pllq )

其中: system_stm32f4xx.c 中的文件是配置晶振让芯片先启动,从内部的高速时钟启动,变换到外部的高速时钟,PLL倍频分频之后,通过配置提供给AHB APB等各种外设,这个配置是通过
stm32f4xx_rcc.h 和 stm32f4xx_rcc.c
来实现的:
那么去分析下:stm32f4xx_rcc.h 先:

void        RCC_AHB1PeriphClockLPModeCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);
void        RCC_AHB2PeriphClockLPModeCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState);
void        RCC_AHB3PeriphClockLPModeCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState);
void        RCC_APB1PeriphClockLPModeCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
void        RCC_APB2PeriphClockLPModeCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
你去仔细的分析:
void        RCC_AHB1PeriphClockLPModeCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);RCC _ AHB1  PeriphClock  LP Mode  cmd   //RCC_AHB1总线上  _外围时钟_LP(PLLP)_模式的命令。
说的很清楚,使用的是pllp的时钟

其实:外围时钟,何为外围,在STM32的学习中,我一直以为他是一个芯片,一个黑盒子,其实不然,他也是由其他的东西组成: 核心CPU ,外围的:DMA 、ADC、DAC、UART、USART 、GPIO 、TIM等等都属于外围设备,这玩意又叫做SOC 片上集成系统。

最经典的应该是 stc51单片机了。他没有集成ADC 、 DAC、DMA 等,仔细想想可以想明白的。

时钟使能相关函数包括外设设置使能时钟源使能两类。

//第一类是: 外设设置使能函数:
void        RCC_AHB1PeriphClockLPModeCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);
void        RCC_AHB2PeriphClockLPModeCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState);
void        RCC_AHB3PeriphClockLPModeCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState);
void        RCC_APB1PeriphClockLPModeCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
void        RCC_APB2PeriphClockLPModeCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

这五个函数,分别用来使能5个总线下面挂载的外设时钟,AHB1 总线, AHB2 总线, AHB3 总线, APB1 总线以及 APB2 总线。要使能某个外设,调用对应的总线外设时钟使能函数即可。

具体的外设怎么挂载???看库函数即可!!!


这个里面有他 挂载的所有的外设。

还有一类是时钟源使能函数,

void RCC_HSICmd(FunctionalState NewState);
void RCC_LSICmd(FunctionalState NewState);
void RCC_PLLCmd(FunctionalState NewState);
void RCC_PLLI2SCmd(FunctionalState NewState);
void RCC_PLLSAICmd(FunctionalState NewState);
void RCC_RTCCLKCmd(FunctionalState NewState);

明白一个道理,他跑起来就是168M,系统时钟,在系统的文件中已经配置好了。之后到每个外围的频率也已经是确定了的。在你不再进行干预的情况下:
AHB最快是:168M
APB2(高速总线)最快是: 84M
APB1 (低速总线) 最快是:48M

STM32--框架结构相关推荐

  1. STM32的I2C特性及架构

    软件模拟协议:使用CPU直接控制通讯引脚(GPIO)的电平,产生出符合通讯协议标准的逻辑. 硬件实现协议:由STM32的I2C片上外设专门负责实现I2C通讯协议,只要配置好该外设,它就会自动根据协议要 ...

  2. 【08】STM32·HAL库开发-HAL库介绍 | STM32Cube固件库介绍 | HAL库框架结构 | 如何使用HAL库及使用注意事项

    目录 1.初识HAL库(了解) 1.1CMSIS简介 1.2HAL库简介 2.STM32Cube固件包浅析(了解) 2.1如何获取STM32Cube固件包? 2.2STM32Cube固件包文件夹简介 ...

  3. 正点原子STM32(基于HAL库)0

    目录 开发环境搭建与使用 常用开发工具简介 MDK 安装 仿真器驱动安装 CH340 USB 虚拟串口驱动安装 使用MDK5 编译例程 使用串口下载程序 使用DAP 下载与调试程序 使用DAP 下载程 ...

  4. STM32应用开发实践教程:可控 LED 流水灯的设计与实现

    任务 2.1 LED 流水灯的应用开发 2.1.1 任务分析 本任务要求设计一个 LED 流水灯系统,具体要求如下. 系统通电时,两个 LED 以 2s 为周期(亮 1s,灭 1s)交替闪烁,并逐渐缩 ...

  5. 【嵌入式】openmv与stm32的串口通信

    参考:(文中部分图/文字/代码来自以下文章,部分内容由于时间久远已经找不到原作者,可联系注明或删除) PYTHON串口数据打包发送STM32接收数据解析 openmv中文文档 这里以openmv循迹代 ...

  6. 【转载】 stm32之PWM

    发现这位博主的博客被大量的转发,我也转载一篇,谁叫人家写的好呢. 原文地址:http://blog.sina.com.cn/s/blog_49cb42490100s6uh.html 脉冲宽度调制(PW ...

  7. (转)jLink使用ITM机制实现调试stm32单片机

    ----------------------------------------------------------------------------------------------- 作者:p ...

  8. STM32学习笔记9(SysTick滴答时钟)

    我不得不说意法半导体确实有点风骚!甚至有点变态.我对ST文档 STM32F10XXX参考手册的编辑水平真是不敢恭维.手册中好多说明都是含糊不清,甚至将好多对初学者来说很重要的地方都一笔带过,让人着实摸 ...

  9. python 开发板-MicroPython:STM32 上 的 Python 开发

    虽然Python在国外是一门非常火的语言,在黑客界更是赫赫有名,然而中国的大学却极少开设 Python 课程,故而国内 Python 程序员多属自学.而一个没有MCU编程经验的初学者,要想让芯片跑起来 ...

  10. STM32 GPIO的原理、特性、选型和配置

    目录 1.基本结构 2.4种输入模式 3.4种输出模式 4.GPIO选型和配置 1.基本结构 STM32 GPIO是通用输入/输出端口的英文简称,其可实现输入.输出.驱动.通信等功能,STM32的I/ ...

最新文章

  1. Java行业情景分析_Java 设计模式情景分析——单例模式
  2. python-字典方法
  3. ZeroMQ简介:一种高性能的异步消息传递库
  4. 盘阵多路径学习(转)
  5. vue2.0桌面端框架_这款优秀的Vue+ElementUI桌面端一站式框架,爱了!
  6. C语言新手入门贪吃蛇的链表实现-控制光标位置,流畅不闪屏
  7. (二)C语言开发工具
  8. hive中sql使用英文分号
  9. js弹窗确认取消php,JS实现删除时的确认弹窗
  10. android textview字体为宋体,安卓开发--textView的字体样式设置(设置宋体,微软雅黑等)...
  11. 麻省理工学院公开课:计算机科学及编程导论习题3下
  12. 了解 Qt 绘图设备QPixmap、QBitmap、QImage和 QPicture
  13. Tableau——制作维恩图(交集图)
  14. android主线程报ANR的问题!
  15. 计算机组成原理笔记--流水线的扩展(1):数据前推与增加宽度
  16. Oracle索引 详解
  17. layui表格使用及分页实现
  18. 见缝插针c语言编程,见缝插针游戏的实现
  19. firewall-cmd --permanent --get-zone-of-interface=ens33显示no zone
  20. 硬盘 NTFS格式 与 exFAT格式 的比较

热门文章

  1. 秘密是如何被泄露的?自建文件分享神器HFS
  2. 监听器:统计在线人数
  3. 史上最全Python快速入门教程,让你快速入门python学好python
  4. (2012.12.25)我的中级软件设计师考试
  5. “胜兵先胜而后求战,败兵先战而后求胜”—系统分析师考试经验谈
  6. python自动下载酷狗音乐_使用Python下载酷狗音乐
  7. dlib人脸对齐(python)
  8. jQuery仿QQ空间图片查看特效(全屏,放大,缩小,旋转,镜像,鼠标滚轮缩放)
  9. WSDM 2021 | 时间序列相关论文一览
  10. 【数据结构】— 「时间复杂度」与「空间复杂度」