STM32之系统时钟

来源:互联网 发布:wifi推送广告软件 编辑:程序博客网 时间:2024/04/29 15:28

作者: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

0 0
原创粉丝点击