打印
[信息]

STM32 的 SysTick 模块的时钟源

[复制链接]
21|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小灵通2018|  楼主 | 2025-1-24 12:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32 的 SysTick 模块可以选择以下两种时钟源:
  • 内核时钟 (HCLK)
    • SysTick 使用 Cortex-M 内核的主时钟 (HCLK) 作为计数器的时钟源。
    • 这种模式下,SysTick 的时钟频率与系统主时钟一致,能够提供更高的计时精度。
  • 内核时钟的 8 分频 (HCLK/8)
    • SysTick 的时钟频率为 HCLK 的 1/8。
    • 这种模式下,计数器时钟速度降低,适用于较低速率的应用,特别是在低功耗模式下。





使用特权

评论回复
沙发
小灵通2018|  楼主 | 2025-1-24 12:04 | 只看该作者
时钟源选择方法SysTick 时钟源通过 SysTick 控制寄存器(CTRL) 的 CLKSOURCE 位(位2)选择:
  • CLKSOURCE = 1:选择内核时钟 (HCLK)。
  • CLKSOURCE = 0:选择内核时钟的 8 分频 (HCLK/8)。
时钟源对定时的影响假设主时钟 HCLK 为 72 MHz:
  • 如果选择 HCLK 作为时钟源,则 SysTick 计数器的频率为 72 MHz。
  • 如果选择 HCLK/8,则 SysTick 计数器的频率为 9 MHz。
由于 SysTick 是 24 位计数器,最大计数值为 2^24 - 1 (16,777,215),所以最大定时周期为:
  • HCLK 模式:(2^24 - 1) / HCLK = (16,777,215) / 72,000,000 ≈ 0.23 秒
  • HCLK/8 模式:(2^24 - 1) / (HCLK / 8) = (16,777,215) / 9,000,000 ≈ 1.86 秒

使用特权

评论回复
板凳
小灵通2018|  楼主 | 2025-1-24 12:04 | 只看该作者
#include "stm32f4xx.h"

void SysTick_ConfigWithClockSource(uint32_t ticks, uint8_t useHCLK) {
    SysTick->LOAD = ticks - 1;  // 设置重装载值
    SysTick->VAL = 0;           // 清零计数器

    if (useHCLK) {
        SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk;  // 使用 HCLK 作为时钟源
    } else {
        SysTick->CTRL &= ~SysTick_CTRL_CLKSOURCE_Msk; // 使用 HCLK/8 作为时钟源
    }

    SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk |  // 使能中断
                     SysTick_CTRL_ENABLE_Msk;   // 启用 SysTick
}

使用特权

评论回复
地板
小灵通2018|  楼主 | 2025-1-24 12:04 | 只看该作者
应用建议
如果需要高精度定时(如微秒级延时),推荐使用 HCLK 作为时钟源。
如果定时周期较长且精度要求不高,或系统频率较高时需节省功耗,可使用 HCLK/8。

使用特权

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

本版积分规则

144

主题

1656

帖子

4

粉丝