微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > 嵌入式系统设计讨论 > 用CM3/4内核自带的SysTick定时器实现基本延时

用CM3/4内核自带的SysTick定时器实现基本延时

时间:10-02 整理:3721RD 点击:
  用CM3/4内核自带的SysTick定时器实现基本延时http://bbs.edu118.com/forum.php?mod=viewthread&tid=440&fromuid=203
(出处: 信盈达IT技术社区)
当stm32中不加载操作系统的时候,我们可以用其内核自带的SysTick定时器实现基本延时,但是在延时的时候有几个基本的问题要解决。
    1)SysTick定时器要独占式操作;------用一个变量表示其被占用情况
    2)能否正常延时要有一个反馈;------用返回值表示延时是否正常
  • #include "stm32f4xx.h"
  • #define SYSTICK 168
  • u8 SYSTICK_USER_OR=0;   //systick是否被占用
  • //用systick定时器实现延时nus微秒
  • //参数nus:  延时nus微秒
  • //返回值: 0 正常延时  1定时器被占用
  • u8 delay_us(u32 nus)
  • {
  •       if(SYSTICK_USER_OR==0)   //systick可用
  •       {
  •              SYSTICK_USER_OR=1;   //占用systick
  •                 //选择时钟源
  •              SysTick->CTRL &=~(0X01<<2);  //选择系统时钟8分频做为systick的时钟源
  •              SysTick->LOAD =nus *SYSTICK/8;//设定计数初值
  •              SysTick->VAL =0;     //重装载计数初值
  •              SysTick->CTRL |=0x01<<0;  //开始定时
  •              while((SysTick->CTRL &(0x01<<16))==0);//等待定时时间到
  •              SysTick->CTRL &=~(0x01<<0);  //关闭定时器
  •              SYSTICK_USER_OR=0;   //释放systick
  •              return 0;
  •        }
  •     return 1;
  • }
  • /////////////////////////////////////////////////////////////////////////////////////////
  • //用systick定时器实现延时nms毫秒
  • //参数nus:  延时nus毫秒
  • //返回值: 0 正常延时  1定时器被占用
  • //最大计数798.9ms
  • u8 delay_ms(u32 nms)
  • {
  •      if(nms>798)    //超过范围
  •       return 1;
  •     if(SYSTICK_USER_OR==0)   //systick可用
  •      {
  •          SYSTICK_USER_OR=1;   //占用systick
  •           //选择时钟源
  •           SysTick->CTRL &=~(0X01<<2);  //选择系统时钟8分频做为systick的时钟源
  •            SysTick->LOAD =nms *SYSTICK*1000/8;//设定计数初值
  •            SysTick->VAL =0;     //重装载计数初值
  •            SysTick->CTRL |=0x01<<0;  //开始定时
  •            while((SysTick->CTRL &(0x01<<16))==0);//等待定时时间到
  •            SysTick->CTRL &=~(0x01<<0);  //关闭定时器
  •            SYSTICK_USER_OR=0;   //释放systick
  •            return 0;
  •      }
  •      return 2;
  • }


有兴趣的童鞋可以多交流交流qq:3208919269.

高深的样子   不懂      

多学学就好了。

好吧     继续努力                 

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top