embedded runtime_error ai_generated true

SysTick:定时器下溢检测到,系统滴答计数损坏

Systick: timer underflow detected, system tick count corrupted

ID: embedded/arm-systick-timer-underflow

其他格式: JSON · Markdown 中文 · English
90%修复率
85%置信度
1证据数
2024-03-12首次发现

版本兼容性

版本状态引入弃用备注
CMSIS 5.9.0 active
FreeRTOS 10.4.6 active
ARM Cortex-M4 r1p1 active

根因分析

SysTick定时器重载值设置过低或时钟分频器配置错误,导致计数器在中断服务程序递增滴答计数之前下溢。

English

SysTick timer reload value set too low or clock divider misconfigured, causing counter to underflow before interrupt service routine can increment tick count.

generic

官方文档

https://developer.arm.com/documentation/dui0552/a/cortex-m3-peripherals/systick-timer

解决方案

  1. Set SysTick reload value to (SystemCoreClock / 1000) - 1 for 1ms tick, and ensure CLKSOURCE bit selects processor clock. Example: SysTick_Config(SystemCoreClock / 1000);
  2. Add a guard in SysTick_Handler to check reload value: if (SysTick->LOAD == 0) { SysTick->LOAD = (SystemCoreClock / 1000) - 1; }

无效尝试

常见但无效的做法:

  1. 85% 失败

    Increasing SysTick interrupt priority does not fix the underflow, as the issue is timer reload value, not priority masking.

  2. 90% 失败

    Adding more delay loops in main loop does not prevent timer underflow; the problem is deterministic and timing-independent.