STM32之系统时钟

3 篇文章 0 订阅

作者: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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值