打印
[信息]

STM32的SYSTICK你了解多少?

[复制链接]
43|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小灵通2018|  楼主 | 2025-1-24 11:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32 的 SysTick 是一个非常重要且常用的系统定时器模块。它由 Cortex-M 内核提供,主要用于定时中断和时间管理,是实现操作系统时钟或延时功能的重要工具。
SysTick 的特点
  • 内核级别组件:SysTick 是 Cortex-M 内核的一部分,因此所有基于 Cortex-M 的 STM32 微控制器都支持它。
  • 24 位递减计数器:SysTick 定时器为 24 位宽,支持从 0xFFFFFF(16,777,215)递减到 0。
  • 固定输入时钟:SysTick 使用内核时钟 (HCLK) 或 HCLK 的 8 分频 (HCLK/8) 作为输入时钟。
  • 中断功能:SysTick 在计数器递减到 0 时可以触发中断,这在实现定时任务或操作系统节拍计时器时非常有用。
  • 易用性:配置简单,只需几行代码即可实现基本功能。

使用特权

评论回复
沙发
小灵通2018|  楼主 | 2025-1-24 11:57 | 只看该作者
SysTick 的组成SysTick 主要包括以下几个寄存器:
  • CTRL(控制寄存器)
    • 用于启用 SysTick、配置中断和选择时钟源。
  • LOAD(重装载寄存器)
    • 指定计数器的初值,计数器递减到 0 后会重新加载该值。
  • VAL(当前值寄存器)
    • 保存当前计数器的值,可随时读取或写入(写入任何值会清零计数器)。
  • CALIB(校准值寄存器)
    • 保存参考时钟的校准值,通常对应 10ms 的计数器值(仅供参考)。

使用特权

评论回复
板凳
小灵通2018|  楼主 | 2025-1-24 11:58 | 只看该作者
SysTick 的典型用途
  • 定时任务
    • SysTick 可生成固定周期的中断,用于触发定时任务,例如 LED 闪烁或数据采集。
  • 操作系统节拍时钟
    • 在实时操作系统(RTOS)中,SysTick 通常用于实现系统时钟,为任务调度和延时功能提供基础计时。
  • 延时功能
    • 使用 SysTick 实现精确的延时。

使用特权

评论回复
地板
小灵通2018|  楼主 | 2025-1-24 11:58 | 只看该作者
配置步骤以下是配置 SysTick 的基本步骤:
  • 设置重装载值 LOAD,对应定时周期。
  • 启用时钟源(选择 HCLK 或 HCLK/8)。
  • 启用 SysTick 和中断功能。
  • 编写 SysTick 中断处理函数。

使用特权

评论回复
5
小灵通2018|  楼主 | 2025-1-24 11:58 | 只看该作者
SysTick 每 1ms 触发一次中断:
#include "stm32f4xx.h"

void SysTick_Handler(void) {
    // SysTick 中断处理函数,每 1ms 触发一次
    HAL_IncTick();  // 更新系统滴答计数(若使用 HAL 库)
}

void SysTick_Init(uint32_t ticks_per_second) {
    // 配置 SysTick 每 1ms 触发一次
    uint32_t ticks = SystemCoreClock / ticks_per_second;  // SystemCoreClock 为 HCLK 频率

    SysTick->LOAD = ticks - 1;        // 设置重装载值
    SysTick->VAL = 0;                 // 清零当前计数器值
    SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |  // 使用 HCLK 作为时钟源
                    SysTick_CTRL_TICKINT_Msk |   // 使能中断
                    SysTick_CTRL_ENABLE_Msk;     // 启用 SysTick
}


使用特权

评论回复
6
小灵通2018|  楼主 | 2025-1-24 11:59 | 只看该作者
注意事项
定时精度:
如果使用 HCLK/8 作为时钟源,定时器的分辨率会降低。
溢出问题:
SysTick 是 24 位定时器,最长定时周期为 (2^24 - 1) / 时钟频率 秒,需注意是否足够长。
实时操作系统:
若使用 RTOS,如 FreeRTOS,则需要正确配置 SysTick 为系统时钟,不能与用户代码冲突。
通过灵活使用 SysTick,可以高效实现多种定时功能,是 STM32 开发中非常重要的一个工具。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

144

主题

1656

帖子

4

粉丝