目录
1. 参考文献
《STM32F10X-中文参考手册》;
2. RCC中的时钟设置
RCC :reset clock control (复位和时钟控制器)
2.1 系统初始化函数
SystemInit();
其中有如下:
/* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */
/* Configure the Flash Latency cycles and enable prefetch buffer */
SetSysClock();
2.2 时钟系统时钟函数
在setsysclock()函数中有时钟系统时钟函数:SetSysClockTo72();
3. 系统时钟
3.1 HSE
HSE 是高速的外部时钟信号,可由晶振提供。使用无源晶振时,由OSC_IN和OSC_OUT进入,一般选用8M的晶振。
3.2 PLL时钟源
PLL时钟来源:HSE和HSI/2。
此处,使用HSE作为PLL时钟来源。代码在SetSysClockTo72()设置如下:
/* Enable HSE */ //((uint32_t)0x00010000)
RCC->CR |= ((uint32_t)RCC_CR_HSEON);//Bit 16 HSEON: HSE clock enable
/* HCLK = SYSCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;//HPRE:AHB预分频//sysclk不分频
/* PCLK2 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;//PPRE2:高速APB预分频//HCLK(总线时钟)不分频
/* PCLK1 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;//PPRE1:低速APB预分频//HCLK 2分频
/* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
RCC_CFGR_PLLMULL));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
//RCC_CFGR_PLLSRC_HSE //HSE = 8MHZ 作为PLLCLK的来源
//RCC_CFGR_PLLXTPRE//HSE不分频
//RCC_CFGR_PLLMULL9//9倍
/* Select PLL as system clock source */
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;
//选PLLCLK作为sysclk的来源
3.3 PLL时钟
PLL时钟是PLLCLK。
3.4 系统时钟
系统时钟是sysclk,sysclk的来源可以有:HSI、PLLCLK、HSE。
3.5 总线时钟
sysclk经过AHB预分频器后得到时钟叫APB总线时钟,即HCLK(总线时钟)。片上大部分外设的时钟都是经过 HCLK 分频得到。
3.6 PCLK2
PCLK2时钟是由HCLK经APB2预分频器得到。
3.7 PCLK1
PCLK1时钟是由HCLK经APB1预分频器得到。