作者:stm_小强
企鹅:759040024
说明:
库文件版本:3.5.0
1. 3.5.0版本的库文件将SystemInit函数放在了启动文件里
Reset handler为复位异常,当发生异常时就会跳到相应的中断向量表定义的函数去执行这里也就是执行SystemInit标号代表的c函数
; Reset handler
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main // 这里应该是申明标号的吧?不是太清楚IMPORT 这个关键字
IMPORT SystemInit
LDR R0, =SystemInit // 跳到SystemInit的连接地址去执行
BLX R0 //带返回的跳转指令
LDR R0, =__main //跳转到main函数去执行
BX R0
ENDP
2.SystemInit函数主要实现对系统时钟的初始化,能满足大多数开发的需求.会根据宏去调用相应的SetSysClock()函数
相关代码:摘取自system_stm32f10x.c
void SystemInit (void)
{
。。。。
SetSysClock(); //最重要的函数,根据定义的系统时钟的宏对rcc相关寄存器初始化
。。。。
}
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 //设置为sysclk=72M
SetSysClockTo72(); //由于我们定义了SYSCLK_FREQ_72MHz这个宏所以这里使用这个函数去初始化寄存器
//可以修改这个宏实现不同的时钟频率
#endif
}
3.分析SetSysClockTo72(),对照寄存器可以知道初始化完成后各时钟为
Sysclk=72Mhz
hclk=72Mhz
pclk1=36Mhz
pclk2=72Mhz
clkusb=48Mhz
STM32之系统时钟
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.