你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

通过SysTick中断实现微秒、毫秒、秒的延时

[复制链接]
lcz17569507 发布时间:2019-12-6 09:28
/*****************************************************************************
* @file     systick.c
* @function 通过系统滴答SysTick中断实现us(微秒)、ms(毫秒)、s(秒)的延时
* @brief    用3.5.0版本库建的工程模板
* @attention           
* @version  V1.0        
* @company      HNSRX科技有限公司
* @website      
* @Author   CZ Li
* @date     2019-11-29
******************************************************************************/
#include "systick.h"
uint32_t SysTickDelayTime;
static uint32_t SysTick_Counter;   // 备用,当前由 定时器 T2 实现
/******************************************************************************
* @brief    初始化系统滴答时钟SysTick      
* @param   
* @retval   
* @note     1)、SystemFrequency / 1000,1ms中断一次
*       2)、SystemFrequency/ 100000   10us中断一次
*       3)、SystemFrequency/ 1000000  1us中断一次
*       (SystemFrequency /Value)个系统时钟节拍中断一次
******************************************************************************/
void systick_init(void)
{
    while(SysTick_Config(SystemCoreClock/10000))  ;
               // 初始化并使能系统滴答时钟,返回1表示计数设置太大
     SysTick->CTRL&= ~ SysTick_CTRL_ENABLE_Msk;  // 失能滴答定时器
}
/******************************************************************************
* @brief    微秒延时     
* @param    需要延时的时间 us
* @retval   
  ****************************************************************************/
void delay_us(uint32_t us)
{
    SysTickDelayTime =us/100;      
    SysTick->CTRL |=SysTick_CTRL_ENABLE_Msk;  // 使能滴答定时器
    while(SysTickDelayTime!= 0);          // 等待延时时间到
}
/******************************************************************************
* @brief    毫秒延时     
* @param    需要延时的时间 ms
* @retval   
  ****************************************************************************/
void delay_ms(uint32_t ms)
{
    SysTickDelayTime =ms*10;      
    SysTick->CTRL |=SysTick_CTRL_ENABLE_Msk;  // 使能滴答定时器
    while(SysTickDelayTime!= 0);          // 等待延时时间到
}
/*****************************************************************************
* @brief    秒延时
* @param    需要延时的时间 s
* @retval   
******************************************************************************/
void delay_s(uint32_t s)
{
    SysTickDelayTime =s*10000;
    SysTick->CTRL |=SysTick_CTRL_ENABLE_Msk;  // 使能滴答定时器
    while(SysTickDelayTime!= 0);          // 等待延时时间到
}
/****************************************************************************
* @brief    获取节拍函数
* @param   
* @retval   
* @note     在SysTick中断程序SysTick_Handler()调用(stm32f10x_it.c)
  ****************************************************************************/
void SysTickDelayTime_Counter(void)
{
    if(SysTickDelayTime> 0)
    {
        SysTickDelayTime--;
    }
     else
     {
         SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;  // 失能滴答定时器
     }
}

收藏 1 评论1 发布时间:2019-12-6 09:28

举报

1个回答
qiangtech 回答时间:2019-12-6 09:58:42
us级的不准啊。

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版