查看: 1726|回复: 0

STM32 Nucleo初级例程2:Systick延时方式点亮LED灯

[复制链接]
  • TA的每日心情
    开心
    2018-9-18 06:28
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2014-12-8 11:29:14 | 显示全部楼层 |阅读模式
    分享到:
    在cotex-m0/m3/m4内核中,都有一个系统定时器模块systick,它可以实现精确定时,在MCU加载RTOS时,提供运行时间基准。这篇文章讲一下利用systick定时器来实现精确延时去点亮LED灯。
    一、systick定时器
    在STM32-NUCLEO-072RB开发平台中,Systick定时器是M0内核自带的一个24位倒计时定时器,它一共有4个寄存SYST_CSR、SYST_RVR、SYST_CVR、SYST_CALIB,定义如下:

    4个寄存器中,校准寄存器SYST_CALIB不用我们考虑,出厂前就配置好了。 主要考虑其它三个寄存器。
    1、 SYST_CSR寄存器:控制和状态寄存器

    CSR寄存器用到4位,bit0用于是否开启定时器,bit1用于是否产生中断,bit2用于选择定时器的时钟源是等于主时钟还是等于主时钟的一半,bit16是定时器的状态。
    2、SYST_RVR寄存器:重装值寄存器
    SYST_RVR设定了加载到SYST_CVR的起始值,24位有效

    3、 SYST_CVR寄存器:当前值寄存器

    对systick定时器正确的配置过程:设置重装值,清除当前值,设置控制和状态寄存器。在STM32软件包自带的CMSIS软件库中已经对systick使用做了库函数封装,直接进行调用即可。下面看一下在KEIL-MDK中如何来使用这个systick定时器。
    二、Keil-mdk中使用systick定时器
    1、调用SysTick_Config()库函数进行定时器配置
    SysTick_Config()这个库函数在cotex-m0.h文件里面定义

    2、实现中断服务函数SysTick_Handler()内容
    SysTick_Handler() 在stm32f0xx_it.c 文件里面定义,在 startup_stm32f072.s里面声明并调用。
    三、Keil-mdk工程软件代码实现:
    1、在Keil-mdk工程模板/driver中增加SYSTICK.C文件,在includes.h文件中加入SYSTICK.C.h头文件,工程截图:

    2、在SYSTICK.C文件里面实现Systick_Init()函数,这里就是调用SysTick_Config()这个函数了。

    这里,主要涉及定时时间,在ST的库文件中,定义了SystemCoreClock这个变量,这里是48MHZ,根据这个变量,只要设定好频率系数,就可以实现任意ms的定时。这里要定时1ms(1kHZ)的话,只要除以1000。
    3、在中断服务函数里面实现100ms延时
    定义一个 unsigned short int 型变量 systick_num 用于对systick中断次数进行计数,因为定时1ms,所以1ms会产生一次中断, systick_num 会增加1,实现一次时间计数。达到100次时,就是延时100ms了,清零计数器重新计数就可以。

    4、在主函数main.c里面调用Systick_Init(),开启定时器

    这样,LED严格按照100ms延时去闪烁了。采用定时器延时要比软件延时精确度高。当然,也可以采用MCU本身的定时器来实现。
    看着是不是很简单呢,有板子的话,可以试验一下。
    代码地址链接
    https://www.eeboard.com/bbs/thread-39696-1-1.html
    摩尔吧视频地址链接
    https://www.moore8.com/courses/306
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-4-25 17:43 , Processed in 0.110378 second(s), 17 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.