查看: 8642|回复: 3

【望月追忆】带你入门STM32F0之二:SysTick时钟介绍

[复制链接]
  • TA的每日心情
    奋斗
    2013-9-16 09:51
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2012-12-7 15:12:44 | 显示全部楼层 |阅读模式
    分享到:
    前面提到了SysTick中断,这里详细说明一下STM32f051的时钟
    清风的关于时钟配置的详细教程https://www.cirmall.com/bbs/thread-3298-1-1.html
    我在这里简洁说明一下
    1. startup_stm32f0xx.s中
    1. Reset_Handler    PROC
    2.                  EXPORT  Reset_Handler                 [WEAK]
    3.         IMPORT  __main
    4.         IMPORT  SystemInit  
    5.                  LDR     R0, =SystemInit
    6.                  BLX     R0
    7.                  LDR     R0, =__main
    8.                  BX      R0
    9.                  ENDP
    复制代码
    也就是说,系统在RESET之后,总会执行 SystemInit 函数 ,然后再跳到 Main 函数。在 SystemInit 函数中,调用 SetSysClock 函数,详细的代码可以先不看,你只要知道,到Main函数的时候,系统的时钟设置成了48Mhz。
    2.下面配置 SysTick 的代码,SystemCoreClock = 48Mhz, SysTick 你可以把它类似成51的定时器,1/SystemCoreClock就是每隔滴答的时间, SysTick_Config 函数给的数字,就是说每隔这么多次滴答中断一次。(SystemCoreClock / 1000 )*
    (1/ SystemCoreClock ) =1ms。注意,一定要加while(1);
    1. if (SysTick_Config(SystemCoreClock / 1000))
    2.         {
    3. while(1);
    4.         }
    复制代码
    通过以上分析,详细大家对STM32f051的时钟有了初步了解了,不要急,时钟这个东西可以慢慢理解,目前懂这一点,对于理解SysTick是够了。以后再根据使用的外围模块对时钟进行分析。
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-5-9 12:20
  • 签到天数: 350 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2012-12-7 17:02:40 | 显示全部楼层
    哦,原来STM32的M0跟STM32的M3有点不一样啊,M3的貌似在主函数中第一个函数是SystemInit()。这个是先SystemInit()才main()函数。学习了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2013-9-16 09:51
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2012-12-7 21:46:27 | 显示全部楼层
    木木 发表于 2012-12-7 17:02
    哦,原来STM32的M0跟STM32的M3有点不一样啊,M3的貌似在主函数中第一个函数是SystemInit()。这个是先System ...

    我刚才看了一下  实际上M3的 启动文件也有
    1. ; Reset handler routine
    2. Reset_Handler    PROC
    3.                  EXPORT  Reset_Handler             [WEAK]
    4.      IMPORT  __main
    5.      IMPORT  SystemInit
    6.                  LDR     R0, =SystemInit
    7.                  BLX     R0
    8.                  LDR     R0, =__main
    9.                  BX      R0
    10.                  ENDP
    复制代码
    就是说 M3 的启动文件也是执行了 SystemInit 之后跳转到main函数,跟M0一样,你可以在main函数开头填一个SystemInit()  也可以不填,因为启动文件已经调用过了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-5-9 12:20
  • 签到天数: 350 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2012-12-7 22:49:27 | 显示全部楼层
    upc_arm 发表于 2012-12-7 21:46
    我刚才看了一下  实际上M3的 启动文件也有就是说 M3 的启动文件也是执行了 SystemInit 之后跳转到main函 ...

    哦,没有看启动文件,原来是这样啊。看来要去仔细看看,谢谢提醒
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 15:17 , Processed in 0.149706 second(s), 21 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.