STM32F4学习笔记2——时钟与复位系统

STM32F4采用了三种不同的时钟用来驱动系统时钟(SYSCLK)
    ·HSI振荡器时钟(内部时钟)
    ·HSE振荡器时钟(外部时钟)
    ·PLL时钟(锁相环时钟)
这些设备有以下两种二级时钟源
    ·32kHz低速内部RC,可用于驱动独立看门狗和通过程序选择驱动RTC。RTC用于从停机/待机模式下自动唤醒系统。
    ·32.768kHz低速外部晶振也可以用来通过程序选择驱动RTC(RTCCLK)。
 AHB总线最高支持168MHz的时钟,通过AHB总线分频APB2最高支持84MHz,APB1最高支持42MHz。
 所有外设驱动全部来至于SYSCLK除了下面几个:
     ·USB OTG FS时钟48MHz,随机信号发生器时钟<=48MHz和SDIO时钟<=48MHz全部来至于PLL48CLK
     ·I2S为了达到高性能要求,I2S时钟可用于内部时钟PLLI2S或者使用外部时钟,通过I2S_CLKIN引脚输入得到。
     ·USB OTG HS 60MHz需要外部PHY芯片内提供
     ·以太网时钟(TX RX RMII)需要外部PHY芯片提供时钟。
RCC通过AHB时钟(HCLK)8分频后作为Cortex系统定时器(SysTick)的外部时钟。通过对SysTick控制与状态寄存器设置,可选择上述时钟或Cortex(HCLK)的始终作为SysTick时钟。
定时器时钟分配频率分配有硬件安一下两种情况自动设置
    ·如果相应APB预分频系数是1,定时器时钟频率与所在APB总线频率一致。
    ·否则,定时器的时钟频率被设为与其相连APB总线频率的两倍。

Reset_Handler PROC

EXPORT Reset_Handler [WEAK]

IMPORT SystemInit

IMPORT __main

             LDR     R0, =SystemInit
             BLX     R0
             LDR     R0, =__main
             BX      R0
             ENDP
系统启动默认使用内部16MHz的RC振荡器,启动过程中NRST引脚产生复位信号,从而进入STM32F4的复位中断函数,在里面调用SystemInit()函数将时钟切换到HSE进入main执行。主要的就是SystemInit函数,这个函数在system_stm32f4xx.c里用于简历系统时钟(系统时钟源,PLL分频因子和倍频因子,AHP/ABPx分频,FLASH设置);SystemCoreClock variable也就是HCLK;SystemCoreClockUpdate()在程序执行中内核时钟发生了变化这个函数是必须会被调用的。HSE默认频率是25MHz,HSE_VALUE在文件stm32f4xx.h里面定义。

static void SetSysClock(void)

{

if defined(STM32F40_41xxx) || defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F401xx) || defined(STM32F446xx)

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

/* PLL (clocked by HSE) used as System clock source */

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

__IO uint32_t StartUpCounter = 0, HSEStatus = 0;

/* Enable HSE */

RCC->CR |= ((uint32_t)RCC_CR_HSEON);

使能HSE,这个函数后面的几个函数等待HSE就绪,如果超时就跳出SetSysClock。等待函数超时是一种很好地编程习惯,如果HSE就绪了的话,在执行相关操作,如果失败在在else中添加调试代码寻找原因。

if ((RCC->CR & RCC_CR_HSERDY) != RESET)

{

HSEStatus = (uint32_t)0x01;

}

else

{

HSEStatus = (uint32_t)0x00;

}

HSE就绪后配置流程如下

HCLK = SYSCLK/1

PLCK2=HCLK/2

PLCK1=HCLK/4

配置主PLL并等待其就绪

配置Flash,prefecth,instruction cache,Data cache和wait state

配置mian PLL作为系统时钟源

到这里基本就完成了HSE对系统时钟初始化的工作,剩下就可以进入mian函数了

时间: 2025-01-01 23:52:23

STM32F4学习笔记2——时钟与复位系统的相关文章

Linux学习笔记——例说makefile 增加系统共享库

0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力.所以特意借助博客总结makefile的相关知识,通过例子说明makefile的具体用法. 例说makefile大致分为4个部分 1.只有单个C文件 2.含有多个C文件 3.需要包括头文件路径 4.增加宏定义 5.增加系统共享库 6.增加自定义共享库 7.一个实际的例子 [代码仓库]--makefile-example

memcached学习笔记5--socke操作memcached 缓存系统

使用条件:当我们没有权限或者不能使用服务器的时候,我们需要用socket操作memcached memcached-client操作 特点: 无需开启memcache扩展 使用fsocketopen()套接字连接memcached 同样执行CRUD require_once(CLASS_PATH.'memcached-client.php');//CLASS_PATH 是我定义的类文件文件夹路径 $mc = new memcached( array( 'servers' => array( '1

STM32F4学习笔记(一)

新建工程 由于使用固件库开发的高效便捷,我选择了使用STM32F4标准外设库.开发板的芯片为STM32F429XX,其他的可根据相关情况进行变化. 在标准固件库中,存在在CMSIS和STM32F4xx_StdPeriph_Driver两个文件夹.在工程中新建一个文件夹Drivers,在此目录中再新建两个目录Inc和Src,分别用于 保存头文件和源文件.将STM32F4xx_StdPeriph_Driver目录下的头文件和源文件,分别拷贝到Drivers目录下的录中.再将CMSIS目录中的需要的文

APUE学习笔记:第六章 系统数据文件和信息

6.1 引言 UNIX系统的正常运行需要使用大量与系统有关的数据文件,针对这些数据文件的可移植接口是本章的主题.本章还介绍了系统标识函数.时间和日期函数 6.2 口令文件 UNIX系统的口令文件包含了下列各字段,这些字段包含在<pwd.h>中定义的passwd结构中 用户名 char *pw_name 加密口令 char *pw_passwd 数值用户ID uid_t pw_uid 数值组ID gid_t pw_gid 注释字段 char *pw_gecos 初始工作目录 char *pw_d

Dynamic CRM 2015学习笔记(2)更改系统显示语言

默认装的是英文的系统,想换成中文的.下面列出操作步骤: 1. 下载并安装语言包 http://www.microsoft.com/en-US/download/details.aspx?id=45014 2. 添加语言 打开settings –> Administration –> Language 点击Apply后,出现下面的提示: 安装CRM安装程序下的 SrsDataConnector\SetupSrsDataConnector.exe 后,再设置语言即可.注意这个要花点时间. 3. 设

STM32F4学习笔记10——RTC实时时钟

RTC实时时钟 实时时钟 (RTC) 是一个独立的 BCD 定时器/计数器.RTC 提供一个日历时钟.两个可编程 闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志.RTC 还包含用于管理低功耗模 式的自动唤醒单元. 两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒.分钟.小时(12 或 24 小时制).星 期几.日期.月份和年份.此外,还可提供二进制格式的亚秒值. 系统可以自动将月份的天数补偿为 28.29(闰年).30 和 31 天.并且还可以进行夏令时 补偿. 其它 32 位寄

STM32F4学习笔记7——USART Part2

硬件流控制 使用 nCTS 输入和 nRTS 输出可以控制 2 个器件间的串行数据流.如图显示了在这种模式 下如何连接 2 个器件: 分别向 USART_CR3 寄存器中的 RTSE 位和 CTSE 位写入 1,可以分别使能 RTS 和 CTS 流 控制. RTS 流控制 如果使能 RTS 流控制 (RTSE=1),只要 USART 接收器准备好接收新数据,便会将 nRTS 变 为有效(连接到低电平).当接收寄存器已满时,会将 nRTS 变为无效,表明发送过程会在 当前帧结束后停止.下图图显示了

Derby-10.11学习笔记(三)Derby系统表及存储过程

鲁春利的工作笔记,谁说程序员不能有文艺范? SQL标准里面是有schema的概念的,只是不同的数据库在具体实现的时候出现了差别.在Derby.SQLServer是支持schema的,而Oracle中schema应该对应其实例(orcl),而MySQL中schema应该对应的是其database.通过create schema lucl;在Derby中创建一个schema,通过DBeaver工具查看: Derby的系统表位于SYS schema中,但SYS却不是系统默认的schema,因此查询表时

西部开源学习笔记BOOK2《自动安装系统》

############################# #####  unit1自动安装系统 ##### ############################# ################################### #### Network Install(HTTP,FTP,NFS) #### ################################### #######1.kickstart脚本###### kickstart脚本是自动应答系统在安装过程中一切