[应用相关] STM32系统时钟配置

[复制链接]
2087|41
 楼主| hehhehee 发表于 2023-7-23 13:17 | 显示全部楼层
我们打开startup_stm32f429_439xx.s文件。当然我这里以F4为例,其他的也都是一样的。会看到在系统复位时候在执行main函数之前先执行了SystemInit函数。那我们现在看看SystemInit函数中都有啥。鼠标放在SystemInit函数上面右键选择Go To Defintion of SystemInit 9734364bcb7cdd88c4.png
 楼主| hehhehee 发表于 2023-7-23 13:17 | 显示全部楼层
就会跳转到system_stm32f4xx.c文件中的SystemInit函数上来了。下面来一行一行分析: 234364bcb7f37cfa7.png
 楼主| hehhehee 发表于 2023-7-23 13:17 | 显示全部楼层
第592行:RCC->CR |= (uint32_t)0x00000001;配置RCC寄存器的时钟控制RCC_CR寄存器第0位为1。打开HSI振荡器。 6255764bcb805ea169.png
 楼主| hehhehee 发表于 2023-7-23 13:18 | 显示全部楼层
第595行:RCC->CFGR = 0x00000000;复位RCC寄存器的时钟配置CFGR寄存器,全为0。 5764264bcb811f1c56.png
 楼主| hehhehee 发表于 2023-7-23 13:18 | 显示全部楼层
第598行:RCC->CR &= (uint32_t)0xFEF6FFFF;;复位RCC寄存器的时钟控制CR寄存器的HSEON、CSSON、PLLON为0。

8411264bcb82cb740b.png
 楼主| hehhehee 发表于 2023-7-23 13:18 | 显示全部楼层
第601行:RCC->PLLCFGR = 0x24003010;复位RCC寄存器的配置PLLCFGR寄存器。具体的操作可以看下面对应的寄存器位值。

4529064bcb8396b622.png
 楼主| hehhehee 发表于 2023-7-23 13:19 | 显示全部楼层
第604行:RCC->CR &= (uint32_t)0xFFFBFFFF;复位RCC寄存器的CR寄存器。
第604行:RCC->CIR = 0x00000000;失能RCC寄存器的CIR寄存器,关闭所有中断。这两行就不一一列举了。
第615行:SetSysClock();这个函数主要是配置AHB、AHB1、AHB2的时钟频率。
 楼主| hehhehee 发表于 2023-7-23 13:19 | 显示全部楼层
3584864bcb8540af41.png 到这里系统时钟就全部配置完成了。在这两个函数中有很多的宏定义,在看代码的时候一定要注意是操作了哪一位,在对应为去找STM32fx的中文参考手册就容易理解多了。
 楼主| hehhehee 发表于 2023-7-23 13:19 | 显示全部楼层
要会看宏定义:


  1. #define  RCC_CR_HSEON                 ((uint32_t)0x00010000) 0x0001 0000。
 楼主| hehhehee 发表于 2023-7-23 13:19 | 显示全部楼层
就是把RCC寄存器的CR寄存器的HSEON置位1。根据 0x0001 0000可以知道HSEON处于CR寄存器的第16位,这一点很重要。

最后来一个总结,在我们按下开发板上面的复位按键之后,系统从启动文件中先执行SystemInit函数,在SystemInit函数中配置了PLL锁相环的各个分频因子,得到了系统时钟。在SystemInit函数中又调用了SetSysClock()函数,来配置AHB、AHB1、AHB2的时钟频率。

现在我们系统时钟配置你会了吗?需要注意的是,我们写在程序的时候一般不需要配置时钟,因为我们一般用的是被人写好的工程模板,直接拿来用就可以了。但是还是需要了解,时钟树的知识比较难以理解,相信大家看上面的内容都会配置了吧!
ATLAS_chen 发表于 2023-7-25 09:23 | 显示全部楼层
系统复位后,默认使用 HSI 作为时钟源

After a system reset, the HSI oscillator is selected as the system clock. When a clock source
is used directly or through PLL as the system clock, it is not possible to stop it.
A switch from one clock source to another occurs only if the target clock source is ready
(clock stable after startup delay or PLL locked). If a clock source that is not yet ready is
selected, the switch occurs when the clock source is ready. Status bits in the RCC clock
control register (RCC_CR) indicate which clock(s) is (are) ready and which clock is currently
used as the system clock.
帛灿灿 发表于 2023-12-29 07:04 | 显示全部楼层

利用协议、加密算法或这些算法中的安全漏洞来进行攻击
Bblythe 发表于 2023-12-29 08:07 | 显示全部楼层

CPLD解密,DSP解密都习惯称为单片机解密
周半梅 发表于 2023-12-29 10:03 | 显示全部楼层

具存储功能的存储器芯片也能加密
Pulitzer 发表于 2023-12-29 11:06 | 显示全部楼层

紫外光复位保护电路是不行的
童雨竹 发表于 2023-12-29 13:02 | 显示全部楼层

大部分能够读取或者识别Flash上的数据就能够获得Firmware文件
Wordsworth 发表于 2023-12-29 14:05 | 显示全部楼层

微探针技术都属于侵入型攻击
Clyde011 发表于 2023-12-29 15:08 | 显示全部楼层

大部分单片机都带有加密锁定位或者加密字节
公羊子丹 发表于 2023-12-29 16:01 | 显示全部楼层

如果在编程时加密锁定位被使能/锁定,就无法用普通编程器直接读取单片机内的程序
万图 发表于 2023-12-29 17:04 | 显示全部楼层

编程器定位插字节
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部