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;                           //清空计数器              
    } 
  • 相关阅读:
    【自动化测试不求人】python自动化测试对xml文件操作
    【自动化测试不求人】python自动化测试对json操作大全
    【自动测试不求人】每日1例无人值守自动化测试异常处理
    自动化测试不求人系列selenium自动化测试键盘事件ActionChains
    【自动化测试不求人】selenium ddt数据驱动模块
    国内常用NTP服务器地址及IP
    Centos语言问题
    linux下创建用户并设置密码
    CCNA Day1
    虚拟光驱导致无法安装光驱驱动的解决方法
  • 原文地址:https://www.cnblogs.com/DXGG-Bond/p/11824552.html
Copyright © 2011-2022 走看看