zoukankan      html  css  js  c++  java
  • SysTick系统定时器

    1.SysTick定时器介绍
    SysTick定时器也叫SysTick滴答定时器,它是Cortex-M3内核的一个 外设,被嵌入在 NVIC 中。它是一个24 位向下递减的定时器,每计数一 次所需时间为1/SYSTICK,SYSTICK是系统定时器时钟,它可以直接取自 系统时钟,还可以通过系统时钟8分频后获取。当定时器计数到0时,将 从LOAD 寄存器中自动重装定时器初值,重新向下递减计数,如此循环往 复。如果开启SysTick中断的话,当定时器计数到0,将产生一个中断信 号。因此只要知道计数的次数就可以准确得到它的延时时间。

    2.SysTick定时器寄存器

    (1)CTRL寄存器 CTRL是SysTick定时器的控制及状态寄存器。其相应位功能如下:
             

      

    (2)LOAD寄存器 LOAD是SysTick定时器的重装载数值寄存器。其相应位功能如下
            

    (3)VAL寄存器 VAL是SysTick定时器的当前数值寄存器。其相应位功能如下:
            

    (4)CALIB寄存器 CALIB是SysTick定时器的校准数值寄存器。其相应位功能如下:
           


    3.SysTick定时器配置步骤
           SysTick定时器的操作可以分为 4 步:
             (1)设置SysTick定时器的时钟源。
             (2)设置SysTick定时器的重装初始值(如果要使用中断的话,就将中 断使能打开)。
             (3)清零SysTick定时器当前计数器的值。
             (4)打开SysTick定时器。

    SysTick_Init()函数:
    void SysTick_Init(u8 SYSCLK)
    {
        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择上图所示的时钟输出。
        fac_us=SYSCLK/8;                    
        fac_ms=(u16)fac_us*1000;                   
    }
    
    delay_us()函数:
    void delay_us(u32 nus)
    {        
        u32 temp;             
        SysTick->LOAD=nus*fac_us;                     //时间加载               
        SysTick->VAL=0x00;                            //清空计数器
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;    //开始倒数      
        do
        {
            temp=SysTick->CTRL;
        }while((temp&0x01)&&!(temp&(1<<16)));        //等待时间到达   
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;    //关闭计数器
        SysTick->VAL =0X00;                           //清空计数器     
    }
    
    delay_ms()函数:
    void delay_ms(u16 nms)
    {                     
        u32 temp;           
        SysTick->LOAD=(u32)nms*fac_ms;                //时间加载(SysTick->LOAD为24bit)
        SysTick->VAL =0x00;                            //清空计数器
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;    //开始倒数  
        do
        {
            temp=SysTick->CTRL;
        }while((temp&0x01)&&!(temp&(1<<16)));        //等待时间到达   
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;    //关闭计数器
        SysTick->VAL =0X00;                           //清空计数器              
    } 
  • 相关阅读:
    CMD命令行netsh添加防火墙规则
    C# 编写windows服务及服务的安装、启动、删除、定时执行任务
    C#释放资源文件dll或exe
    .net core 2.1 Razor 超快速入门
    正则表达式的先行断言(lookahead)和后行断言(lookbehind)
    C#从IE缓存读取图片
    实现ppt幻灯片播放倒计时
    C#自动化操作IE浏览器系列之一打开新的浏览器并导航到百度进行搜索
    MT【188】一个正切余切有关的恒等式
    MT【187】余弦的线性组合
  • 原文地址:https://www.cnblogs.com/DXGG-Bond/p/11824552.html
Copyright © 2011-2022 走看看