STM32的时钟系统体系结构

发布者:创客1992最新更新时间:2019-01-15 来源: eefocus关键字:STM32  时钟系统  体系结构 手机看文章 扫描二维码
随时随地手机看文章

一、STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。


     ①HSI振荡器(RC振荡器)时钟是高速内部时钟,一般很少使用,因为精度没有外部高速时钟(晶振)那么高


   ②HSE是高速外部时钟接石英/陶瓷谐振器,或接外部时钟源,频率范围为4MHz~26MHz,M4开发板是8M         


        ③LSI是低速内部时钟,RC振荡器,频率为32kHz提供低功耗时钟。主要供独立看门狗和自动唤醒单元使用。


   ④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。用于驱动 RTC 时钟 (RTCCLK)


   ⑤PLL为锁相环倍频输出(倍频时钟)。STM32F4有两个PLL:


    1、主PLL(PLL)由HSE或者HSI提供时钟信号,并具有两个不同的输出时钟。


            第一个输出PLLP用于生成高速的系统时钟(最高168MHz)


            第二个输出PLLQ用于生成USBOTG FS的时钟(48MHz),随机数发生器的时钟和SDIO时钟。


    2、专用PLL(PLLI2S)用于生成精确时钟,从而在I2S接口实现高品质音频性能。


------------------------------------------------------------------------------------------------------------------------------------------------------


二、系统时钟SYSCLK可来源于三个时钟源:

        ①、HSI振荡器时钟


        ②、HSE振荡器时钟


        ③、PLL时钟


------------------------------------------------------------------------------------------------------------------------------------------------------


三、时钟树


------------------------------------------------------------------------------------------------------------------------------------------------------


四、开发板与系统时钟频率不匹配,如何修改?


1.查看汇编文件 startup_stm32f40_41xxx.s的第177行


Reset_Handler    PROC // 复位中断执行


EXPORT  Reset_Handler             [WEAK] // 复位中断执行


IMPORT  SystemInit // 系统时钟初始化的入口


IMPORT  __main


 


       LDR     R0, =SystemInit  // 系统时钟初始化


       BLX     R0


       LDR     R0, =__main  // 启动main


       BX      R0


       ENDP


 


2.查看system_stm32f4xx.c的第252行开始


PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N


PLL_VCO  = (8000000 / 8) * 336


 


计算公式:SYSCLK = PLL_VCO / PLL_P = 336*1000000 / 2 == 168000000 == 168000KHz == 168MHz


------------------------------------------------------------------------------------------------------------------------------------------------------


修改:system_stm32f4xx.c第254行


#define PLL_M      25


修改为:


#define PLL_M      8


修改 stm32f4xx.h第127行


#if !defined  (HSE_VALUE)


#define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */


修改为:


#if !defined  (HSE_VALUE)


#define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz *


(如遇到无法修改:权限问题:)点击名字那里能看到路径,找到.h修改权限



----------------------------------------------------------------------------------------------------------------------------------


根据文档了解我们的开发板的总线时钟频率:


系统时钟频率:标准频率为168MHz


AHB时钟频率:168MHz


APB1时钟频率:42MHz


APB2时钟频率:84MHz


 


超频:提高cpu运行的时钟频率。


调节PLL_N为432;


降频:降低CPU运行的时钟频率。


调节PLL_N为168;


关键字:STM32  时钟系统  体系结构 引用地址:STM32的时钟系统体系结构

上一篇:STM32的Systick滴答定时器及延时函数编写
下一篇:STM32Cube的串口配置与使用

推荐阅读最新更新时间:2024-03-16 16:22

STM32单片机的应用笔记 奇怪的NRST 管脚异常复位问题
1. 引言 本文探讨一个奇怪的MCU NRST 管脚异常复位现象。 2.复位问题及排查 这个问题是客户对开发的平台做EMS 浪涌测试的时候发生的, 平台上使用了一个STM32G474 RCT6 MCU 。在某个等级的EMS 测试中, 客户发现MCU有时候会异常复位而影响平台的稳定工作。 2.1. MCU 异常复位问题的通常解决思路 我们知道, 导致MCU异常复位的原因有很多, 比如外部复位电路被干扰, MCU 电源的异常跌落, 看门狗不能正常喂狗导致的复位等等。 STM32 MCU 的复位标志位寄存器可以帮助我们发现导致异常复位的线索。复位标志位的相关信息可以在STM32 MCU 的Reference Manual
[单片机]
<font color='red'>STM32</font>单片机的应用笔记 奇怪的NRST 管脚异常复位问题
ST完成STM32微控制器全系底层软件部署
意法半导体完成了将其免费底层应用程序接口(LL API,Low-Layer Application Programming Interface)软件导入支持所有的STM32微控制器(MCU)的STM32Cube软件包中。LL API软件让专业级开发人员能够在方便易用的STMCube™环境内开发应用,使用ST验证过的软件对最低到寄存器级的代码进行优化,从而缩短产品上市时间。 在所有的STM32Cube包内整合LL API和硬件抽象层(HAL)软件,让开发人员能够完全自由地选择外设控制方式。他们可以选择利用HAL的易用性和移植性,或采用LL API软件优化性能 、代码量和功耗。为相关STM32 Nucleo开发板订制的例
[单片机]
ST完成<font color='red'>STM32</font>微控制器全系底层软件部署
STM32中断,及FreeRTOS中断优先级配置
很多朋友对中断的一些知识还是不了解,今天就写点关于Cortex-M3处理器中断相关,以及FreeRTOS中断优先级配置的内容。 1写在前面 写本文之前,先写点相关的扩展内容。 STM32属于ARM中Cortex-M系列处理器,比如:STM32F1数据Cortex-M3,STM32F7数据Cortex-M7。 可以参看我之前分享文章: 从Cortex-M到Cortex-A认识ARM处理器 ,了解一下关于ARM处理器的种类。 本文主要结合Cortex-M3下面STM32F1系列处理器为例来讲述中断控制相关内容。而Cortex-M其它系列,或者说STM32其它系列关于中断的内容类似。 Cortex
[单片机]
<font color='red'>STM32</font>中断,及FreeRTOS中断优先级配置
STM32 USB虚拟串口问题汇总
汇总1:STM32的USB例程修改步骤,来自http://blog.csdn.net/cy757/archive/2010/01/01/5117610.aspx 以下是笔者将ST的Custom_HID例程修改为“自定义USB设备”例程时总结出来的,因为笔者也是刚刚学USB开发不久,某些方面理解错误在所难免,请各位大虾指正。 一、usb_desc.c文件 根据你程序使用的通信方式修改。usb_desc.h文件中定义要根据usb_desc.c文件中的数组的大小;ConfigDescriptor 下添加需要处理的端点;根据需要添加或删除报告描述符(主要用于HID)和CDC接口描述符(主要用于实现USB转串口)等。具体方法可以下载个“
[单片机]
从自定义的库函数到STM32官方标准库
  在上一节的基础上,进一步改写代码,再引入官方标注库函数。虽然官方标准库慢慢式微,有一些别的库可能会取代它,但是并不妨碍我们继续拿官方库来写代码,吸取里边好的写法,强化下C语言技能,加深对寄存器的理解也是不错的。   本文模仿库函数,首先自定义库函数,然后一步一步改写代码,最终引入官方标准库函数。 实现流水灯 void delay(unsigned int a) { while(a--); } int main(void) { RCC- APB2ENR |= RCC_APB2ENR_IOPBEN; GPIOB- CRH &= ~(0xf (0*4)|0xf (1*4)); GPIOB- CRH |= 0x
[单片机]
从自定义的库函数到<font color='red'>STM32</font>官方标准库
STM32堆和栈(Heap & Stack)及SRAM存储使用
编译一个程序,出现下面的信息: 明明程序没有什么内容,为什么变量大小就有RW+ZI=52+1836=1888字节大小了呢,就已经使用了1888字节的SRAM空间。让我们打开map文件: 可以看到每个文件所使用的SRAM大小,比如delay文件使用了4个字节,地址从0x20000014到0x20000017。其中可以看到HEAP和STACK占了大头,分别占了0x00000200和0x00000400的空间。STACK的起始地址是0x20000360,大小是0x00000400,那么最后的地址是0x20000760,刚好等于1888=0x760字节。于是我们就知道SRAM空间用来存放了什么东西了:1、各个文件中声明和定义的全局
[单片机]
<font color='red'>STM32</font>堆和栈(Heap & Stack)及SRAM存储使用
单片机学习之STM32中断
简介:STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。 1.中断优先级管理 嵌套向量中断控制器:Nested Vectored Interrupt Controller (NVIC) CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。 STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。 STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。 STM32F103系列上面,又只有60个可屏蔽中断(在
[单片机]
如何升级STM32单片机的代码
bootloader设置: static void check_boot_mode(void) { uint32_t JumpAddress; void(*Jump_To_Application)(void); if (((*((__IO uint32_t*)(APP_SEGA_START_ADDRESS+8))) & 0x2FFE0000 ) == 0x20000000) { JumpAddress = *(__IO uint32_t*) (APP_SEGA_START_ADDRESS + 12); Jump_To_Application = (void *)JumpAddress; __set_MSP(*((__IO ui
[单片机]
如何升级<font color='red'>STM32</font>单片机的代码
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved