当前运行的主频比较复杂。如果使用了外部晶振,肯定与外部晶振有关,然后还要看设置了哪些倍频。
所以并有没哪个寄存器可以简单地取得主频值。
CubeMX构建的工程解决这个问题的思路给您介绍一下。
首先定义一个宏,用来描述外部晶振频率
#if !defined (HSE_VALUE)
#define HSE_VALUE 8000000U /*!< Default value of the External oscillator in Hz.
然后定义一个静态变量
uint32_t SystemCoreClock;
然后在函数SystemCoreClockUpdate里根据寄存器CFGR的值去计算SystemCoreClock的取值
这样,SystemCoreClock就可以给所有与主频有关的初始化函数使用了。
比如,这样的延时函数:
static void RCC_Delay(uint32_t mdelay)
{
__IO uint32_t Delay = mdelay * (SystemCoreClock / 8U / 1000U);
do
{
__NOP();
}
while (Delay --);
}