标签:
STM32共有五个时钟源,分别是:
此处重点介绍系统时钟,一般其他所有的外设时钟的来源都是SYSCLK,SYSCLK通过AHB分频器分频之后送给各个模块使用。这些模块中包括APB1和APB2分频器。
具体如下表:
名称 | 类型 | 外设内容 | ||
APB1 | 低速外设 |
电源接口、备份接口、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()函数中设置的系统时钟的大小如下:
标签:
原文地址:http://www.cnblogs.com/lwangj/p/5071565.html