[牛人杂谈] SysTick的作用你知道吗

[复制链接]
5864|57
 楼主| 小灵通2018 发表于 2024-7-12 22:55 | 显示全部楼层 |阅读模式
SysTick(System Timer)是ARM Cortex-M系列微控制器中的一个系统定时器,用于提供一个简单的时间基准。它内置在Cortex-M内核中,因此在大多数Cortex-M系列微控制器上都可以找到。SysTick的主要作用包括以下几个方面:

1. 系统心跳计时
SysTick定时器可以用来产生周期性中断,作为系统心跳(heartbeat)计时器。这种心跳信号可以用于操作系统的任务调度,定时任务的触发,或者用来监控系统的健康状态。

2. 时间测量
SysTick可以用来测量时间间隔,例如执行某段代码所需的时间。这对于性能调试和优化是非常有用的。

3. 定时器功能
SysTick可以用作通用的定时器。你可以配置SysTick定时器产生一个中断,然后在中断处理程序中执行特定的任务。例如,你可以用它来实现软件延时,定时采样,或者周期性检查。

4. 延时函数
SysTick常用于实现精确的延时函数。通过配置SysTick的计数值和时钟源,你可以产生精确的毫秒级或微秒级延时。

5. 协助操作系统
在运行实时操作系统(RTOS)时,SysTick通常用于产生系统时钟节拍,用于任务调度。RTOS会使用SysTick中断来切换任务,并管理延时和定时功能。

SysTick的基本工作原理
SysTick包括一个24位的向下计数器,当计数器从设置的初值减到零时,会产生一个SysTick中断。计数器可以自动重新加载,从而产生周期性的中断。SysTick有三个主要寄存器:

CTRL(控制寄存器):用于控制SysTick的启停、时钟源选择、中断使能等。
LOAD(装载寄存器):用于设置计数器的初值,即定时器周期。
VAL(当前值寄存器):用于读取或写入当前计数器的值。

 楼主| 小灵通2018 发表于 2024-7-12 22:55 | 显示全部楼层
Cortex®-M0包含一个完整的系统定时器, 系统定时器提供一个简单的、24位写入清零、递减、带灵活控制机制的自动装载计数器。该计数器可以用作实时操作系统(RTOS)的滴答定时器或作为一个简单的计数。
当系统定时器使能后,将从SysTick当前值寄存器(SYST_VAL)的值向下递减到0,并在下一个时钟周期,重新加载SysTick重加载值寄存器(SYST_LOAD)的值,然后再随时钟递减。当计数器递减到0,COUNTFLAG状态位将被设置,COUNTFLAG位读时清0。
复位时,SYST_ VAL的值是未知的。使能前,软件应向该寄存器写入值来清0。这样保证定时器会从SYST_LOAD值开始计数而不是一个随机值。
如果SYST_LOAD为0,定时器在重新加载后,将保持值为0。这种机制可以用来在定时器使能后,独立地禁用计数功能。
 楼主| 小灵通2018 发表于 2024-7-12 22:55 | 显示全部楼层
新唐的ARM内核单片机均有这个外设,你用过吗?
dspmana 发表于 2024-8-12 20:57 | 显示全部楼层
SysTick通常用作系统滴答定时器,为操作系统提供时间基准,用于任务调度、延时和心跳时钟等功能。
班杰明 发表于 2024-8-12 22:10 来自手机 | 显示全部楼层
这个怎么当做延时用啊?
xiaoyaodz 发表于 2024-8-12 22:35 | 显示全部楼层
SysTick定时器可以用来实现精确的延时。通过配置SysTick定时器的重载值和使能中断,可以在固定的时间间隔后产生中断,从而实现延时功能。
sesefadou 发表于 2024-8-13 00:12 | 显示全部楼层
在低功耗模式下,SysTick可以用来唤醒系统,确保系统能够在指定的时间点恢复运行。
averyleigh 发表于 2024-8-13 04:14 | 显示全部楼层
SysTick可以用于监控系统运行状态,例如检测任务是否按时完成,或者在系统挂起时唤醒系统。
mikewalpole 发表于 2024-8-13 07:29 | 显示全部楼层
通过配置SysTick定时器的重载值和使能中断,可以定期更新系统时间,从而实现时间的精确测量。
caigang13 发表于 2024-8-13 07:49 来自手机 | 显示全部楼层
也叫系统嘀嗒时钟,产生一个时间基准,是跑OS的最小时间刻度。
1988020566 发表于 2024-8-13 10:21 | 显示全部楼层
SysTick是一个24位递减计数器,当计数值递减到0时,计数器自动重新加载预设值并继续递减。
wwppd 发表于 2024-8-13 12:14 | 显示全部楼层
SysTick可以用来实现精确的延时功能,这对于需要定时执行的操作非常重要。
yorkbarney 发表于 2024-8-13 16:07 | 显示全部楼层
通过SysTick中断,可以实现精确的延迟和延时功能,这对于需要定时执行的操作非常有用。
sheflynn 发表于 2024-8-13 18:06 | 显示全部楼层
SysTick的时钟源可以是系统时钟(通常是HCLK,即主时钟),也可以是HCLK除以8,具体取决于配置。
lzmm 发表于 2024-8-14 22:32 | 显示全部楼层
SysTick可以作为一个独立的中断源,当计数器计数到0时,会产生一个中断请求。这个中断可以用来执行周期性的任务或进行时间管理。
youtome 发表于 2024-8-15 10:53 | 显示全部楼层
SysTick定时器可以配置为周期性中断,用于实现周期性任务的调度。例如,LED闪烁、传感器数据采集等需要定期执行的任务,都可以通过SysTick中断来实现。
bestwell 发表于 2024-8-15 13:58 | 显示全部楼层
在低功耗模式下,SysTick可以用来唤醒系统,使其从休眠状态恢复到正常运行状态。
everyrobin 发表于 2024-8-15 17:12 | 显示全部楼层
Sysick定时器在嵌入式系统中扮演着重要角色,不仅为RTOS提供关键支持,还可用于延时、时间测量等操作,从而大大简化编程逻辑和提高系统的可靠性。
mollylawrence 发表于 2024-8-17 10:05 | 显示全部楼层
在操作系统中,SysTick定时器常被用作系统时钟,用于实现时间片轮转调度、定时任务、事件计数等功能。例如,在FreeRTOS等实时操作系统中,SysTick定时器用于触发任务调度。
maqianqu 发表于 2024-8-17 15:59 | 显示全部楼层
在多任务环境中,SysTick可以用来实现任务切换和时间片轮转,确保各个任务能够公平地分配处理器时间。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

157

主题

1727

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部