目录
(3)在SystemInit函数中找到SetSysClock函数
(4)在SetSysClock函数中找到SetSysClockTo72函数
简述
型号:HK32F103RBT6
对HK32进行超频测试,发现最大可设置为104MHz。群里有网友说可超频到120M,不知道是不是我修改的位置不对,或者是芯片的问题。只修改PLL,最大可超频至104Mhz。超频至更高频率时,需同时修改PLL和Flash延时周期。
1 修改PLL
在工程中找到修改主频的位置:
(1)打开启动文件
(2)在启动文件中找到SystemInit
该函数用于设置微控制器系统
- 初始化嵌入式Flash接口,锁相环和更新
- SystemCoreClock变量
双击选中,按F12或右击Go To Definition进入。
(3)在SystemInit函数中找到SetSysClock函数
该函数是用来:
- 配置系统时钟频率、HCLK、PCLK2、PCLK1预标器
- 配置Flash延时周期,并开启预取缓冲区
(4)在SetSysClock函数中找到SetSysClockTo72函数
为什么是SetSysClockTo72函数,不是其他那几个,因为只有 SYSCLK_FREQ_72MHz被声明了。
双击SYSCLK_FREQ_72MHz,按F12即可看到:
返回,双击 SetSysClockTo72,按F12:
(5)进入SetSysClockTo72函数
可以看出原来8*9=72MHz的主频,已经被修改为8*12=96MHz。(8M是晶振的时钟)
用定时器+GPIO反转+示波器验证一下,确实是这样。
理论上将RCC_CFGR_PLLMULL12改为RCC_CFGR_PLLMULL13,可超频至8*13=104MHz。实测确实是104M。
理论上将RCC_CFGR_PLLMULL12改为RCC_CFGR_PLLMULL14,可超频至8*13=112MHz。但是问题出现了,上电就卡死在时钟这里了。更改为更高的,情况也如此,最高只能到104M。将8M晶振换为12M晶振,按上述方法,依旧无法超频到112M以上。
分割线---------------------------------------------------------------------------------------------------------------------
2023-1-11
今天看到有个APM32超频的帖子,里面的前辈是这样说的:
超频首先考虑的是FLASH的读速度。
通常是FLASH等待周期要往向调,你可以认为超频后的主频太快,FLASH不够快,要延时来匹配一下。
FLASH等待周期越大,指令执行速度又会下降,所以超频后的执行速度还要实测一下(至少不是线性提高的)。
另一位前辈是这样说:
1、实现超频
除了配置PLL外,还需注意依据规格书配置Flash等待周期参数。
2、实现超频后,对外设的影响
外设是挂在AHB、ABP总线上的,实现超频后,如果按照默认代码的频系数,
对应的外设频率也会提高。
(1)USB
如果有用到USB,注意超频后通过配置分频系数保证USB的频率为48MHz。
(2)Timer
注意对Timer的时基单元、死区时间时的影响,对输出的PWM的周期的影响。
(3)ADC
如果超频后,ADC的工作频率超过14MHz,有可能会降低其精度,注意ADC的降频
(4)其它的外设注意最高工作频率、通信速率的限制,以保证工作可靠。
(5)会增大运行模式、sleep模式的功耗
3、软件延时
超频时,会影响软件延时的时间,对时序要求要高的场景有用到软件延时时,得注意对时序的影响。
4、不建议超频应用,尤其是在高温且对产品可靠性要求高的应用场景
原帖链接https://bbs.21ic.com/icview-3206930-1-1.html
之前的超频是只配置了PLL,未配置Flash等待周期。
2 配置Flash等待周期
同样在SetSysClockTo72函数中,将2个Flash等待周期改为3个:
HK32我还未来得及试,不过APM32我试了,原来的2个Flash等待周期,超频至80Mhz便会出现问题:有时候启动不了MCU(概率很高,有时候甚至达到50%)。但改为3个Flash等待周期后,APM32F103RB超频至80Mhz,96Mhz均无问题。