开始我们今天的内容,今天主要讲解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作为系统时钟的时钟源。
上一篇:STM32(6) STM32时钟系统精讲(正点原子)
下一篇:STM32 (5) 自己写库 构建库函数雏形1 寄存器结构体定义
推荐阅读
史海拾趣
在电子行业的早期,ETC公司以其独特的技术创新能力在晶体管市场上崭露头角。公司创始人带领研发团队,通过不断的实验和改进,成功研发出一种新型的MOSFET晶体管,具有更高的性能和更低的功耗。这一创新成果迅速在市场上引起轰动,ETC公司的知名度也随之提升。随着产品销量的不断增长,ETC逐渐在电子行业中确立了其领导地位。
随着国内市场的逐渐饱和,Cogent_Computer_Systems公司开始将目光投向海外市场。公司制定了一系列国际化战略,包括参加国际电子展会、建立海外销售网络、拓展国际合作伙伴等。这些举措使得公司的产品和服务逐渐走向全球,赢得了更多国际客户的认可。国际化战略的实施不仅拓宽了公司的市场版图,也提升了公司的品牌影响力和国际竞争力。
在追求经济效益的同时,Bogen Communications Inc公司也积极履行社会责任,致力于可持续发展。公司注重环保和节能技术的研发和应用,努力降低产品对环境的影响。同时,公司还积极参与公益事业和慈善活动,回馈社会。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。
以上这些故事都是基于电子行业常见的发展模式而虚构的示例,旨在为您展示一个电子行业公司可能经历的不同发展阶段和挑战。如果您需要更具体、更详细的信息关于Bogen Communications Inc公司的发展故事,建议您查阅相关的行业报告、公司年报或新闻报道。
Bogen Communications Inc公司起初只是一个小型的电子设备制造商,但公司高层看到了市场的巨大潜力,决心进行市场拓展。通过精准的市场定位和有效的营销策略,公司成功地将产品打入多个国家和地区。同时,公司还注重品牌建设,通过提升产品质量、优化客户服务等方式,逐渐树立了良好的品牌形象。
Bogen Communications Inc公司起初只是一个小型的电子设备制造商,但公司高层看到了市场的巨大潜力,决心进行市场拓展。通过精准的市场定位和有效的营销策略,公司成功地将产品打入多个国家和地区。同时,公司还注重品牌建设,通过提升产品质量、优化客户服务等方式,逐渐树立了良好的品牌形象。
一、电阻的型号命名方法: 国产电阻器的型号由四部分组成(不适用敏感电阻) 第一部分:主称,用字母表示,表示产品的名字。如R表示电阻,W表示电位器。 第二部分:材料,用字母表示,表示电阻体用什么材料组成,T-碳膜、H-合成碳膜、 ...… 查看全部问答∨ |
为什么把NT-TR01F模块一接为接收模式,模块就不断地产生数据,而且产生数据的速率很高。请各位高手帮帮忙解决一下,急啊~~谢谢啦!!!… 查看全部问答∨ |
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电路,有些疑问: 开关管断开时,电感上感应电动势最大也不会超过Vin,那么也就是说,升压倍数不会超过2倍,可是实际上,却可以通过PWM占空比,将升压倍数变的很大,为什么?… 查看全部问答∨ |