STM32--框架结构
关于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--框架结构相关推荐
- STM32的I2C特性及架构
软件模拟协议:使用CPU直接控制通讯引脚(GPIO)的电平,产生出符合通讯协议标准的逻辑. 硬件实现协议:由STM32的I2C片上外设专门负责实现I2C通讯协议,只要配置好该外设,它就会自动根据协议要 ...
- 【08】STM32·HAL库开发-HAL库介绍 | STM32Cube固件库介绍 | HAL库框架结构 | 如何使用HAL库及使用注意事项
目录 1.初识HAL库(了解) 1.1CMSIS简介 1.2HAL库简介 2.STM32Cube固件包浅析(了解) 2.1如何获取STM32Cube固件包? 2.2STM32Cube固件包文件夹简介 ...
- 正点原子STM32(基于HAL库)0
目录 开发环境搭建与使用 常用开发工具简介 MDK 安装 仿真器驱动安装 CH340 USB 虚拟串口驱动安装 使用MDK5 编译例程 使用串口下载程序 使用DAP 下载与调试程序 使用DAP 下载程 ...
- STM32应用开发实践教程:可控 LED 流水灯的设计与实现
任务 2.1 LED 流水灯的应用开发 2.1.1 任务分析 本任务要求设计一个 LED 流水灯系统,具体要求如下. 系统通电时,两个 LED 以 2s 为周期(亮 1s,灭 1s)交替闪烁,并逐渐缩 ...
- 【嵌入式】openmv与stm32的串口通信
参考:(文中部分图/文字/代码来自以下文章,部分内容由于时间久远已经找不到原作者,可联系注明或删除) PYTHON串口数据打包发送STM32接收数据解析 openmv中文文档 这里以openmv循迹代 ...
- 【转载】 stm32之PWM
发现这位博主的博客被大量的转发,我也转载一篇,谁叫人家写的好呢. 原文地址:http://blog.sina.com.cn/s/blog_49cb42490100s6uh.html 脉冲宽度调制(PW ...
- (转)jLink使用ITM机制实现调试stm32单片机
----------------------------------------------------------------------------------------------- 作者:p ...
- STM32学习笔记9(SysTick滴答时钟)
我不得不说意法半导体确实有点风骚!甚至有点变态.我对ST文档 STM32F10XXX参考手册的编辑水平真是不敢恭维.手册中好多说明都是含糊不清,甚至将好多对初学者来说很重要的地方都一笔带过,让人着实摸 ...
- python 开发板-MicroPython:STM32 上 的 Python 开发
虽然Python在国外是一门非常火的语言,在黑客界更是赫赫有名,然而中国的大学却极少开设 Python 课程,故而国内 Python 程序员多属自学.而一个没有MCU编程经验的初学者,要想让芯片跑起来 ...
- STM32 GPIO的原理、特性、选型和配置
目录 1.基本结构 2.4种输入模式 3.4种输出模式 4.GPIO选型和配置 1.基本结构 STM32 GPIO是通用输入/输出端口的英文简称,其可实现输入.输出.驱动.通信等功能,STM32的I/ ...
最新文章
- Java行业情景分析_Java 设计模式情景分析——单例模式
- python-字典方法
- ZeroMQ简介:一种高性能的异步消息传递库
- 盘阵多路径学习(转)
- vue2.0桌面端框架_这款优秀的Vue+ElementUI桌面端一站式框架,爱了!
- C语言新手入门贪吃蛇的链表实现-控制光标位置,流畅不闪屏
- (二)C语言开发工具
- hive中sql使用英文分号
- js弹窗确认取消php,JS实现删除时的确认弹窗
- android textview字体为宋体,安卓开发--textView的字体样式设置(设置宋体,微软雅黑等)...
- 麻省理工学院公开课:计算机科学及编程导论习题3下
- 了解 Qt 绘图设备QPixmap、QBitmap、QImage和 QPicture
- Tableau——制作维恩图(交集图)
- android主线程报ANR的问题!
- 计算机组成原理笔记--流水线的扩展(1):数据前推与增加宽度
- Oracle索引 详解
- layui表格使用及分页实现
- 见缝插针c语言编程,见缝插针游戏的实现
- firewall-cmd --permanent --get-zone-of-interface=ens33显示no zone
- 硬盘 NTFS格式 与 exFAT格式 的比较
热门文章
- 秘密是如何被泄露的?自建文件分享神器HFS
- 监听器:统计在线人数
- 史上最全Python快速入门教程,让你快速入门python学好python
- (2012.12.25)我的中级软件设计师考试
- “胜兵先胜而后求战,败兵先战而后求胜”—系统分析师考试经验谈
- python自动下载酷狗音乐_使用Python下载酷狗音乐
- dlib人脸对齐(python)
- jQuery仿QQ空间图片查看特效(全屏,放大,缩小,旋转,镜像,鼠标滚轮缩放)
- WSDM 2021 | 时间序列相关论文一览
- 【数据结构】— 「时间复杂度」与「空间复杂度」