普通延时函数/SysTick 定时器延时中断方式/SysTick 定时器延时非中断方式概述

目录

1  普通延时函数

2  SysTick 定时器延时中断方式

3  SysTick 定时器延时非中断方式


1  普通延时函数

普通延时函数是最基本的延时实现方式,通常在裸机编程或者对时间精度要求不高的场合使用。它的工作原理是通过循环消耗CPU周期来达到延时的目的。例如,一个简单的延时函数可能如下所示:

```c
void delay_ms(uint32_t ms)
{
    uint32_t i, j;
    for(i = 0; i < ms; i++)
    {
        for(j = 0; j < 1000; j++);
    }
}
```

在这个例子中,通过两个嵌套的循环,程序执行大量的空指令,从而占用CPU时间,达到延时的目的。这种方法的缺点很明显:延时不精确,受CPU时钟频率和系统负载的影响较大,且在延时期间CPU不能执行其他任务,浪费了资源。

2  SysTick 定时器延时中断方式

SysTick定时器是Cortex-M系列处理器内核自带的一个24位下递减计数器。当计数到0时,它可以通过中断的方式通知CPU。这种方式实现延时的步骤通常如下:

1. **初始化SysTick定时器**:设置时钟源(通常为系统时钟),重装载值(决定计数周期),开启中断,并使能定时器。
2. **编写中断服务例程(ISR)**:当SysTick计数到0时,ISR会被执行,此时可以更新延时状态或直接处理延时后的逻辑。
3. **开始计数**:启动SysTick计数器后,它会在每个时钟周期递减计数值,一旦计数到0,会触发中断并自动重装载初始值,继续计数。
4. **等待中断**:主程序设置好延时时间后,进入等待状态,直到SysTick中断发生,然后在ISR中处理延时结束的逻辑。

这种方法的优点是延时更加准确,不会因为CPU执行其他任务而受到影响,且在延时期间CPU可以执行其他任务。

3  SysTick 定时器延时非中断方式

非中断方式使用SysTick定时器实现延时,通常是在不需要执行特定中断处理逻辑,或者希望简化程序结构时使用。其基本流程包括:

1. **初始化SysTick定时器**:类似中断方式,设置时钟源、重装载值,但不一定需要开启中断。
2. **轮询计数器**:启动SysTick后,主程序通过不断检查SysTick当前计数值(通常是通过读取计数器寄存器`VAL`),等待其递减到0或者某个预设值。
3. **执行延时**:在计数器达到预设值之前,主程序可能执行忙等待(即空循环),或者进行其他非关键性操作。

相比于中断方式,非中断方式的延时实现较为简单,不需要编写中断服务例程,但是它仍然会导致CPU在此期间无法执行其他任务,且实时性不如中断方式,因为需要不断地检查计数器状态。

总结来说,普通延时函数简单但不精确,SysTick定时器延时(无论是中断还是非中断方式)提供了更精确的延时控制,其中中断方式更为高效且不阻塞CPU,适用于对时间敏感和多任务处理的场景。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值