为了使stm32f10x的初学者在学习STM32的时候不必去考虑STM32f10x复杂的时钟系统,官方提供了时钟配置的函数并在调用main函数之前调用,这在启动文件中可以看到,以STM32F103VC为例(以后芯片均已此款芯片为例),对应的启动文件为startup_stm32f10x_hd.s
; Reset handler
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
下面来看看 SystemInit 函数中到底做了哪些事
void SystemInit (void)
{
RCC->CR |= (uint32_t)0x00000001; //开启内部8MHz振荡器
#ifndef STM32F10X_CL //非STM32F10x互联型
RCC->CFGR &= (uint32_t)0xF8FF0000; //HSI作为系统时钟 AHB预分频器不分频 APB1不分频 APB2不分频 PCLK 2分频后作为ADC时钟 MCO无时钟输出
#else //STM32F10x互联型
RCC->CFGR &= (uint32_t)0xF0FF0000; //HSI作为系统时钟 AHB预分频器不分频 APB1