zoukankan      html  css  js  c++  java
  • STM32之滴答定时器

      1.定时器主要由时钟源、分频器、基准时钟、计数器和重装载值寄存器组成

      2.单片机定时器都是通过计数来实现计时, 而滴答定时器是Cortex-M3内核自带的一个24位向下计数的定时器 

      3.SysTick定时器被捆绑在NVIC中, 用于产生SysTick异常。 常用来做延时或者实时系统的心跳时钟。
      4.
    SysTick定时器就是系统滴答定时器, 一个24 位的倒计数定时器, 计到0 时, 将从RELOAD 寄存器中自动重装载定时初值。 只要不把它在SysTick 控制及状态寄存器中的使能位清除, 就永不停息, 即使在睡眠模式下也能工作。 
      5。滴答定时器的寄存器介绍
      (1)控制及状态寄存器STK_CTR ---用来选择时钟源(CLKSOURCE)和标志位的判断(COUNTFLAG)及滴答定时器异常请求使能(TICKINT)和定时器使能(ENABLE)。 
      (2)重装载数值寄存器STK_LOAD----决定计数的个数( 周期) 。 
      (3)当前值寄存器STK_VAL-------------实际计数的寄存器。 
    例如: 实现1ms计时时间, 定时器时钟频率为
    72MHz,使用内核时钟( FCLK) , STK_LOAD寄存器为计
    72000个数实现1ms计时。
      

    void Delay_Init(void)
    {
    //    SysTick->VAL = 0;//计数器清0
    //    //使能计数器  中断  内核时钟
    //    SysTick->CTRL |=(1<<0)|(1<<1)|(1<<2);
    //    SysTick->LOAD = 72000-1;
    //    NVIC_SetPriority(SysTick_IRQn,0xf);   // 11 11
        if(SysTick_Config(72000)==1)
        {
            while(1); //错误
        }
    }
    /*
        函数名称:Delay_ms
        函数功能:ms延时
        函数参数:time -- 延时时间
        函数返回值:无
    */
    void Delay_ms(uint32_t time)
    {
        uint32_t nowtime = runtime;
        while(runtime < nowtime + time);    
    }
    SysTick初始化---Delay_Init------延时1ms

    可以借由此滴答时钟进行时间片的实验  

    uint32_t runtime = 0; //记录系统运行的时间
    uint32_t ledrun[2]={0,300}; //ledrun[0]  -- 起始时间 
                                                            //ledrun[1]  -- 结束时间
    uint32_t beeprun[2] = {0,500};
    uint32_t keyrun[2] = {0,10};
    // 1ms产生一次中断
    void SysTick_Handler(void)
    {
        runtime++;
        ledrun[0]++;
        beeprun[0]++;
        keyrun[0]++;
    }
    时间片

      Systick库函数相关函数

      

     

     









  • 相关阅读:
    mysql 位操作支持
    统计代码行数
    git merge的参数--squash的用处
    bash和zsh切换
    nginx 添加https支持
    查看Memcache运行状况
    unkown host mac 解决
    react-redux中的重要API解析
    js 同步延时调用
    从输入 URL 到浏览器渲染完成
  • 原文地址:https://www.cnblogs.com/juan-4-14/p/12981701.html
Copyright © 2011-2022 走看看