【STM32】STM32f4学习之路--时钟
HSE:外部晶振/陶瓷谐振器、精度高。ST官方推荐的外部晶振是8M,如果外接其他类型的晶振,须在stm32f4xx.h程序中修改宏,以及在system_stm32f4xx.c修改PLL HSI:内部16MRC振荡器,启动速度比HSE快,但精度不及HSE。 LSE:外部晶振/陶瓷谐振器,一般用于实时时钟(RTC)的时钟源,功耗低且精度高。 LSI:内部32KHz振荡器,可作为停机/待机、独立看门狗、自动唤醒单元的时钟源。 PLL:分为主PLL和专用PLL。主PLL由HSE或HSI提供时钟信号,并输出两时钟(1个用于系统时钟168M,1个用于USB OTG FS时钟48M、随机数发生器<=48M、SDIO时钟<=48M);专用PLL与主PLL有相同的输入时钟,但其有专门的使能禁止和分频系数,为I2S提供时钟。 下面是stm32的时钟树,图片太大,我们分开来看。
ST官方推荐的stm32外部晶振是8M,这样子的话,通常我们只需调用库函数system_stm32f4xx.c中的**void SystemInit(void)**函数即可进行时钟的配置,默认是168M系统时钟,APB1为42M,APB2为84M,如需要可自行修改。
##3-后记 PS:这里刚开始有个疑问为什么TIM14(挂载在APB1)能达到84MHz,,看了时钟树之后才发现,定时器时钟做了另外的处理的,记录下;
从STM32F4的内部时钟树可知,当APB1和APB2分频数为1的时候,TIM1、TIM8TIM11的时钟为APB2的时钟,TIM2TIM7、TIM12TIM14的时钟为APB1的时钟;而如果APB1和APB2分频数不为1,那么TIM1、TIM8TIM11的时钟为APB2的时钟的两倍,TIM2TIM7、TIM12TIM14的时钟为APB1的时钟的两倍。
因为系统初始化SystemInit函数里初始化APB1总线时钟为4分频即42M,APB2总线时钟为2分频即84M,所以TIM1、TIM8TIM11的时钟为APB2时钟的两倍即168M,TIM2TIM7、TIM12~TIM14的时钟为APB1的时钟的两倍即84M。
另外,TIM_ClockDivision是在采样时使用的时钟分频器,比如输入捕获时的采样时钟或计算互补输出的死区的时钟;时钟分频就一个PSC,还有一个重装载计数值ARR,一般只有设置这两个就够了,TIM_ClockDivision在输入捕获和PWM的互补输出时设置才有意义!
