历史上的今天
返回首页

历史上的今天

今天是:2024年09月09日(星期一)

正在发生

2019年09月09日 | STM32F4 (7) Systemlinit时钟系统初始化函数剖析

2019-09-09 来源:eefocus

开始我们今天的内容,今天主要讲解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作为系统时钟的时钟源。

推荐阅读

史海拾趣

Cal-Chip Electronics公司的发展小趣事

在快速发展的过程中,Cal-Chip Electronics公司始终关注社会责任和可持续发展。公司积极参与公益事业,支持教育、环保等领域的发展。同时,公司还注重环保生产,通过引进先进的环保技术和设备,减少生产过程中的污染排放。此外,公司还建立了完善的员工培训体系,为员工提供广阔的职业发展空间。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

以上是关于Cal-Chip Electronics公司在电子行业发展的5个相关故事,这些故事展示了公司在不同历史阶段所取得的成就和面临的挑战。通过不断努力和创新,Cal-Chip Electronics公司已经成为了电子行业的一颗璀璨明星。

Gamma Microelectronics ( APM )公司的发展小趣事

G24i的成立可以追溯到2006年,它自称是世界上首家生产商业化应用等级DSSC的公司。公司的技术根基源自瑞士洛桑联邦理工学院的M. Gratzel团队,该团队是DSSC技术的先驱。G24i由美国Kanorka Technologies公司投资,而Kanorka则得到了美国军方的资助。这一强大的技术背景为G24i的商业化之路奠定了坚实的基础。公司成立后不久,便致力于将实验室级别的DSSC技术推向市场,开启了其商业化探索的征程。

GE Oil & Gas Digital Solutions公司的发展小趣事
使用高精度的电阻和电容元件可以减少元件误差对测量结果的影响。
HAHN - Elektrobau GmbH & Co KG公司的发展小趣事

高通公司在追求技术创新的同时,也积极履行企业社会责任。公司发布了《2023高通中国企业责任报告》,详细介绍了高通如何通过赋能数字化转型、负责任地经营以及可持续地运营等战略重点领域,推动社会公平发展。高通与中国乡村发展基金会、中国红十字基金会等多个机构合作,开展智慧农业、基层医务工作者培训等项目,助力乡村振兴和医疗卫生事业发展。此外,高通还致力于STEM教育,通过合作项目为下一代创新者提供技能和知识支持。这些举措不仅体现了高通的社会责任感,也为其在电子行业中的长远发展奠定了良好的社会基础。

Acopian Power Supplies公司的发展小趣事

在高通的发展历程中,公司多次面临来自竞争对手的专利纠纷。面对这些挑战,高通积极应诉,通过长达数年的法律斗争,最终捍卫了自己的CDMA创新成果。这些胜利不仅彰显了高通在通信技术领域的深厚积累,也进一步巩固了其在行业中的技术领导地位。高通持续投入大量资源进行研发创新,确保了公司在全球蜂窝通信技术领域的领先地位。

Barry Industries Inc公司的发展小趣事

Barry Industries Inc深知品质是企业生存和发展的关键。因此,公司始终将品质管理放在首位,从原材料采购到生产流程控制,再到产品出厂检验,每一个环节都严格把控品质。同时,公司还注重品牌建设,通过提升产品形象和服务水平,逐渐树立了良好的品牌形象。

问答坊 | AI 解惑

简化的6通道串行通讯板怎么设计?

以下设计题中,主CPU芯片均采用ATMega128L-8AU,供电电源为12V DC。 1. ATMega128L的工作电源为2.7V~5.5V DC,因此需要为CPU设计一个合适的电源系统,请使用LM2576-ADJ设计一个三端稳压电路,输出5V DC/3A供整个设计使用,需要设计电源指示灯 ...…

查看全部问答>

乔布斯你凭什么这么牛?

最近IT业的人没有不知道iPhone 4的信号门,为此展开的口水战也屡见于各大媒体。“信号门”本不是什么好事,对于其他公司甚至可能是灭顶之灾,但苹果有个乔布斯,信号门不仅乔布斯出尽风头,出现在各大媒体头版头条,iPhone 4手机的销售也好像丝毫没 ...…

查看全部问答>

MTK6225 手机开发板(含源代码)

MTK6225 手机开发板(含源代码) 有诚意者请联系 Qq:296662705 硬件特性: 1、 CPU:mtk6225 2、 TFLASH 卡接口 3、 176X220 2.6寸TFT LCD,最高支持320*240*16的TFT LCD 4、 4线触摸屏接口 5、 双声道音频输出 6、 一个Camera 130万像素 ...…

查看全部问答>

嵌入式设备里,添加java游戏,如何支持Java?

因为手头的开发板是mips32+linux,嵌入式设备里,想添加java游戏,应该移植哪种JVM比较好,比较快,比较容易?据说kaffe是一个不错的JVM,有没有移植过的朋友,可以参考指点的,谢谢!…

查看全部问答>

问问linux、嵌入式行业的开发人员

总说linux开发或者linux下的嵌入式开发,尽管在网上能搜罗到不少相关的信息,但总归没有一个清晰的概念和界定。 究竟在实际工作中是哪些东西的开发?分为哪几种?需要什么知识? 注:小弟我现在做java,由于对底层的偏爱,想转底层开发,学习 ...…

查看全部问答>

有北京的朋友和我一起买扬创s3c2440的板子吗 ?

有北京的朋友和我一起买扬创s3c2440的板子吗 http://www.yctek.com/shop/view_47.html 团够就可以便宜的。有意思的朋友可以留言。我看了。比这个价格还要便宜好几百呢。人越多他们说越便宜。…

查看全部问答>

3.3V转5V,大家在实践中都用什么芯片

3.3V转5V,大家在实践中都用什么芯片?…

查看全部问答>

Xilinx FPGA & MATLAB SYSTEM GENERATOR FIR COMPILOR 调通了

基于MATLAB SYSTEM GENERATOR 的FIR滤波器终于调通了,模型如下: 参数如下:   输出波形如下图所示: 上图中,第一个波形是待滤波的波形,第二个是FIR数字滤波器的输出波形,第三个是MATLAB自带的滤波器。   然而,上述结果 ...…

查看全部问答>

IAR中跑的好好的,换到MDK中就会莫名其妙的进Fault中断,请各位帮忙看看!

下面的程序在IAR中用的好好的,但是自己有点吹毛求疵了,还是习惯用MDK,所以就转到MDK下用,程序什么的都不变,只是把对应的driverlab.a文件换成了对应的driverlib.lib文件,build没有问题,下载进去也没问题,前面的串口输出也没问题,但程序一跑 ...…

查看全部问答>

任务栈空间检测机制(rtos使用者必看)

目前绝大部分的rtos都是没有基于mmu或者mpu来运行的,也就是说没有内存保护机制。在没有内存保护机制的前提下,最揪人心的莫过于任务栈空间的溢出了,任务栈空间的溢出随时就像一颗定时炸弹等着引爆,使用者浑身不自在。有没有100%的任务栈空间溢出 ...…

查看全部问答>