2025-11-08 06:46:35
时钟分频就是让高频时钟变慢点用对吧?比如单片机主频36MHz,要降到9MHz就得分4份。先看晶振频率是36MHz,然后算分频系数是36/9=4。接着在寄存器里写上这个4,重启芯片就能用了。代码里一般用`RCC->APB2Prescaler = 0x04`这种写法,注意得先关时钟再改寄存器,关了再开。
为啥是这个答案呢?因为分频系数等于源时钟除以目标时钟,比如STM32的AHB分频系数是4,36MHz/4=9MHz。数据手册写得很清楚:`APB2 Prescaler`默认是1,最大能分16份。比如晶振72MHz,要分到18MHz就得72/18=4,同样写0x04。但得看具体芯片,比如STM32F4的APB1最大分16,APB2分4。代码里关时钟是防跑飞,比如`RCC->CRL |= 0x00000005`,开时钟是`RCC->CRL &= 0x000000DF`。比如先关APB2,再写分频值,开APB2。这样分下来误差才小,比如系数4对应实际频率是9.375MHz,手册说误差小于1%。但一般应用场景够用了,像PWM定时器或UART这些。
本题链接: