打印
[信息]

STM32 的 SysTick 模块的时钟源

[复制链接]
349|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小灵通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。

使用特权

评论回复
5
公羊子丹| | 2025-3-10 08:04 | 只看该作者
SysTick默认用的就是HCLK/8,很多人没注意,结果定时总是偏慢。

使用特权

评论回复
6
周半梅| | 2025-3-10 08:11 | 只看该作者
如果项目对时间精度要求高,切换成HCLK模式是个不错的选择,尤其是高速任务。

使用特权

评论回复
7
帛灿灿| | 2025-3-10 08:12 | 只看该作者
HCLK/8模式挺适合低功耗应用,尤其是系统空闲时还能保持较准的定时。

使用特权

评论回复
8
童雨竹| | 2025-3-10 08:14 | 只看该作者
切换SysTick时钟源的时候,别忘了重新配置SysTick->LOAD,不然定时会乱套。

使用特权

评论回复
9
万图| | 2025-3-10 08:16 | 只看该作者
如果用的是HAL库,HAL_InitTick函数里默认配置的是HCLK/8,很多人容易忽略。

使用特权

评论回复
10
Wordsworth| | 2025-3-10 08:18 | 只看该作者
我之前做个USB项目,用HCLK/8时定时器偏差挺大,后来切到HCLK模式就准多了。

使用特权

评论回复
11
Bblythe| | 2025-3-10 08:19 | 只看该作者
在低功耗模式下,HCLK可能会关闭,所以选择HCLK/8模式更稳定些。

使用特权

评论回复
12
Pulitzer| | 2025-3-10 08:21 | 只看该作者
SysTick在RTOS里用得挺多,改时钟源时要注意和任务调度周期匹配。

使用特权

评论回复
13
Uriah| | 2025-3-10 08:23 | 只看该作者
HCLK模式下的SysTick可以精准到纳秒级,挺适合时间敏感型应用。

使用特权

评论回复
14
Clyde011| | 2025-3-10 08:25 | 只看该作者
选择时钟源时,别忘了结合电源功耗来考虑,低功耗应用HCLK/8可能更合适。

使用特权

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

本版积分规则

148

主题

1679

帖子

4

粉丝