开始我们今天的内容,今天主要讲解systeminit  ,


参考《STM32中文参考手册》、STM32库函数开发


回顾一下上一讲有五个的时钟来源    


1.LSI 低速的内部时钟


2.LSE 低速的外部时钟


3HSI 高速的内部时钟


4PLLCLK 通过锁相环


5  HSE高速的外部时钟


SYSCLK 系统时钟,他的主要来源有1HSI   2HSE   3PLLCLK,大部分情况都是用PLLCLK,应为F4芯片可以跑到168Mhz,PLLCLK主要来自主PLLCLK的锁相环,时钟 法人计算方法 之前已经说过,主PLLCLK的锁相环可以选择HSI、HSE作为时钟输入,在我们系统初始化的时候(正点原子)使用的是HSE(高速的外部时钟),这里选用的HSE是8M,计算公式在上一讲已经讲过,经过计算后 就得到168Mhz的时钟。正点原子的SYSteminit()函数在system——stm32xx.h里面,在系统复位之后 是先执行这个SYSteminit()函数的,


在系统复位之后,为什么要先调用这个函数再调用mian函数呢?在CORE文件中的startup_stm32f40_41xx.s中有几行代码, 这几行代码我们不深究,他是说明在执行mian函数之前先执行systeminit这个函数。

接下来我们看systeminit()这个函数,


FPU seting是 浮点运算的配置,到后面再讲解


下面这几行代码是将CR寄存器的最低位设置成1,作用:打开HSI时钟,

CR 寄存器的作用: 使能一些时钟


我们来看一下CR寄存器的最低位,位0使能HSI( 内部高速时钟)   位1内部高速时钟就绪标志。

我们要使用这些时钟的步骤(以LSI为例)


1打开时钟源


2等待 时钟就绪(等待时钟稳定)


systeminit函数还有5行代码,都是Reset,就是将相应的位设置为0


这里先把CFGR寄存器全部设置为0,然后把这个CR寄存器相应的位设置为0,并把不用的时钟也设置为0(关闭),


并关闭了所有的中断(上图这些位的设置我们可以对照寄存器去 设置)

下面我们举例说明这些寄存器的设置,CR&0xFEF6FFFF(1111 1110 0110 1111 1111 1111 1111)


可以看出这里把第16位设为0,关闭HSE,第19位为0,关闭时钟安全系统(CSSON)


CSS作用:当外部晶振坏了,就会将时钟切换到HSI,


第24位PLLON 为0 将主PLL 关闭,其他的可以对照寄存器去看


接下来就到 SetSysClock();这个是一个关键

我们进入SetSysClock()函数看一下:

第一行: 打开外部的高速时钟

 

正点原子这里用了8M的外部晶振。


下面这句就是等待外部时钟稳定


如果时钟就绪,就将HSEstatus设置为1

 当HSEstatus稳定并被设置为1, 就开始执行下面 的代码

1.打开了PWR的时钟,配置PWR相关寄存器,

下面这个寄存器是操作这个CFGR寄存器HCLK=SYSCLK,其中HCLK是由SYSCLK经过AHB的预分频器产生的,也就是说这里AHB的预分频系数是1,(不分频)


下图是CFGR预分频器的第7-4位,上面这里设为全0,就是不分频

下面这几行代码是将PCLK2设置为HCLK的2分频,PCLK1设置为HCLK的4分频


下面这几行代码就包括了设置了 HCLK  PCLK1  PCLK2 几个时钟的分频,这些时钟都是给外设用的

接下就是设置PLLCFGR 寄存器,这个寄存器主要是用来设置倍频系数、分频系数。 

PLLCFGR在时钟树里面就是用设置  xN  /P /M 这三个值 的,这几个值就直接关系到PLLCLK的大小


在设置之前先要进行运算


设置了PLLCFGR位22,选择HSE振荡器时钟作为PLL和PLLI2S时钟输入,

在运算过程中选择 RCC_PLLCFGR_PLLSRC_HSE做或运算,作用是把HSE作为下图选择器的输入

然后就去计算,之后赋值给这个PLLCFGR,下面这些值可以通过宏定义查看


下图就是计算相关参数的宏定义,通过 这些值可以计算我们的系统时钟频率,计算方法在《STM32库函数开发指南》4.3.2小节

设置好上面这些之后,我们就可以使能主PLL也就是右图的PLLCLK


接下来就要把系统时钟的时钟源选择为PLLCLK,


RCC_CFGR的为0和位1就是用于系统时钟切换的


到此,我们配置了HCLK PLLCLK2  PLLCLK1,


选择HSE作为PLLCLK的时钟源,


将系统时钟选择为了PLLCLK


补充:因为系统时钟比flash时钟 要快,所以要等待一下系统时钟,这个在中文参考手册,嵌入式flash接口这里有描述


总结:系统时钟 函数配置过程:


1选择HSE作为时钟源,并使能,


2然后 就将HCLK APB1 APB2这些分频系数设置好


3将HSE作为 主PLL的时钟源


4配置 M N P这些参数,产生PLLCLK,使能PLLCLK,等待它 就绪


5选择PLLCLK作为系统时钟的时钟源。

关键字:STM32F4  Systemlinit  时钟系统  初始化函数 引用地址:STM32F4 (7) Systemlinit时钟系统初始化函数剖析

上一篇:STM32(6) STM32时钟系统精讲(正点原子)
下一篇:STM32 (5) 自己写库 构建库函数雏形1 寄存器结构体定义

推荐阅读

#ifndef PCF8563_CFG_H#define PCF8563_CFG_H////////////////////////////////////////////////////////////////////////////////////////------------使用包含的头文件#include "i2c_task.h"#ifdef USE_MCU_STM32 #include "delay_task.h"#endif//---寄存器定义#define PCF8563_REG_STATUS1 0x00#define PCF8563_REG_STATUS2 0x01#defi...
近年来,徐州把加快发展集成电路与ICT产业作为经济转型升级的重要支撑点,全力打造国内重要的集成电路与ICT产业体系,集成电路与ICT产业实现了从无到有,由小变大,从低端走向高端的发展态势。目前,基本形成了以集成电路材料与设备、封装与测试为主的集成电路产业,以及以云计算、大数据、物联网、软件与服务外包为主的信息技术服务业。整体产业呈现4大特...
再过两周,也就是美国时间9月22日,被马斯克称为特斯拉历史上最重要的活动电池日将在美国加州工厂举行,这也是特斯拉首次专门针对电池技术举办发布会。为何特斯拉这场活动会受到业内如此关注?此前预热的特斯拉在电池方面的技术“核弹”百万公里电池、无钴电池、干电极技术、硅纳米线技术等四项重磅技术“核弹”极有可能会在此次活动上抛出。特斯拉目前所...
BSLAM自主导航定位系统即BITO SLAM SYSTEM,是AMR等新一代智能移动设备的眼睛,是每一台智能移动机器人不可或缺的核心模块。正是由于SLAM技术的突破和发展,才诞生了基于SLAM自然导航的智能移动机器人,它可替代传统的磁条、磁钉及二维码导航方式的AGV,不仅可以节省场地改造的费用和时间,同时也可快速完成部署,不影响工厂正常生产。BSLAM自主导航定位...

史海拾趣

问答坊 | AI 解惑

电子基础知识--电阻篇

  一、电阻的型号命名方法:  国产电阻器的型号由四部分组成(不适用敏感电阻)  第一部分:主称,用字母表示,表示产品的名字。如R表示电阻,W表示电位器。  第二部分:材料,用字母表示,表示电阻体用什么材料组成,T-碳膜、H-合成碳膜、 ...…

查看全部问答∨

请教一下怎么用NT-TR01F模块~~急!!!

为什么把NT-TR01F模块一接为接收模式,模块就不断地产生数据,而且产生数据的速率很高。请各位高手帮帮忙解决一下,急啊~~谢谢啦!!!…

查看全部问答∨

DELPHI串口编程剖析

1.串口通信的基本原理: 一般计算机与外部设备通讯有两种方式: 并行传送(Parallel ):一次的传输量为8个位(1字节),通过并行端口,如打印机 串行传送(Serial ):一次只传输1个位,通过串行端口,如RS-232 位与字节的概念:  &n ...…

查看全部问答∨

U-Boot1.1.3移植问题 ,ping 的时候 packet too big

平台LPC2210(ZLG公司的MagicARM2200) 网卡芯片:RTL8019 移植后ping上位机,得到packet too big的信息 望有朋友能够帮忙…

查看全部问答∨

我该怎么办啊?真的要再重头来做嵌入式吗?太灰心

我们单位原来做的那一块极度萎缩,认为没有前途,根据大政方针要深入嵌入式开发,可是我对于这一块很不熟悉,对于C、DSP、硬件、linux内核都是重头入门,做了10多年的MIS,都快要人到中年了,现在又要重头入门,我该怎么办啊?真的要再重头来做嵌入 ...…

查看全部问答∨

【低功耗】Altera低功耗Cyclone III FPGA实现了便携式应用的高度集成

     Altera公司(NASDAQ: ALTR)近日宣布,65-nm Cyclone® III FPGA系列推出新的8x8 mm2封装(M164),为设计人员提供单位电路板上容量最大的FPGA。设计人员现在可以充分利用Cyclone III器件的低功耗和大容量领先优势,设计实现消 ...…

查看全部问答∨

MSP430 UCSI A0 的 UART 和 B0 的 IIC 是共用同一个中断吗?

MSP430 UCSI   A0 的 UART 和 B0 的 IIC 是共用同一个中断吗?会不会有冲突呢?…

查看全部问答∨

boost基本电路的质疑

大家好,我最近在看电力电子书籍,关于boost电路,有些疑问: 开关管断开时,电感上感应电动势最大也不会超过Vin,那么也就是说,升压倍数不会超过2倍,可是实际上,却可以通过PWM占空比,将升压倍数变的很大,为什么?…

查看全部问答∨

刚开始学msp430g2553,想做一个可以播放生日歌的小东西,哪位大神可以指点一二

女朋友快过生日了,想把自己学的东西给她做一个小东西,但是感觉有点难,…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved