STM32共有五個時鐘源,分別是:
此處重點介紹系統時鐘,一般其他所有的外設時鐘的來源都是SYSCLK,SYSCLK通過AHB分頻器分頻之後送給各個模塊使用。這些模塊中包括APB1和APB2分頻器。
具體如下表:
電源接口、備份接口、CAN、USB、I2C1、I2C2、UART2、UART3等
APB2 高速外設 UART1、SPI1、Timer1、ADC1、ADC2、普通IO口(PA~PE)、第二功能IO口等以上的時鐘輸出中很多都是帶使能控制的,例如:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG, ENABLE);
是對PD和PG口進行時鐘使能。
STM32時鐘系統配置初始化有函數Sys-temInit()之外,其它的配置在stm32f10x-rcc.h文件之中。
對於系統時鐘默認的情況下在SystemInit函數的SetSysClock()函數中判斷的,具體如下:
static void SetSysClock(void)
{
#ifdef SYSCLK_FREQ_HSE
SetSysClockToHSE();
#elif defined SYSCLK_FREQ_24MHz
SetSysClockTo24();
#elif defined SYSCLK_FREQ_36MHz
SetSysClockTo36();
#elif defined SYSCLK_FREQ_48MHz
SetSysClockTo48();
#elif defined SYSCLK_FREQ_56MHz
SetSysClockTo56();
#elif defined SYSCLK_FREQ_72MHz
SetSysClockTo72();
#endif
}
這段代碼是判定系統宏定義的時鐘是多少,然後設置相應的值,系統默認為72MHz:
#define SYSCLK_FREQ_72MHz 72000000
如果需要設置其他頻率的時鐘,只需要在stm32f10x-rcc.c文件的第115行注釋掉上面代碼,加入將需要的頻率代碼即可。
在SystemInit()函數中設置的系統時鐘的大小如下: