【神舟王】----时钟的学习
对于STM32时钟的了解做一个备忘录:
1 3.5的库 默认执行 SystemInit()函数,改函数执行后,如果使用了外部晶振,则配置HSE为PLL输入,SYSCLK=72Mhz,如果没有使用外部晶振,则配置成HSI为SYSCLK,此时SYSCLK=8MHz。
2 在Systick的设置中,
if (SysTick_Config(SystemCoreClock / 1000)) { while(1); } TimingDelay = nus; while(TimingDelay != 0);
这仅仅对于SystemCoreClock=72Mhz是对的,当SystemCoreClock不是72MHz时,要改动。
3 加入宏定义:
#define SYSTICK_FREQ (48000000)
if (SysTick_Config(SYSTICK_FREQ / 1000))
这样就解决问题了。
4 SYSCLK可以是
(1)直接是HSI
(2)HSI二分频进入到PLL后倍频得出时钟 HSI必须二分频后才能进入到PLL,可以1到16倍数的倍频。
但是注意,这种情况SYSCLK最大是 64MHz。
5 可以在 RCC_Configuration 函数的最后添加一句代码
SystemCoreClock = HSI_VALUE / 2 * 12; //SystemCoreClock = SYSCLK_FREQ_48MHz;
改变 SystemCoreClock 的值。
6 获取SYSCLK的值
RCC_ClocksTypeDef RCC_Clock;
RCC_GetClocksFreq(&RCC_Clock);