背景
针对 STM32F103C8T6 程序卡死在 SysTick_Handler
的问题,以下是系统的定位过程和解决方案:
1. 现象确认
• 现象描述:程序运行后卡死,调试器显示程序计数器(PC)停留在 SysTick_Handler
中的 B .
指令(死循环)。
• 关键线索:B .
是汇编中的无限循环指令,通常意味着中断未正确退出或系统未能正常调度。
2. 初步分析
SysTick_Handler
是系统定时器中断服务程序,常见问题包括:
- 中断未清除:中断标志未清除导致重复触发。
- 堆栈溢出:中断处理时堆栈溢出破坏关键数据。
- 时钟配置错误:系统时钟或 SysTick 时钟源配置异常。
- 中断优先级冲突:高优先级中断阻塞 SysTick 处理。
- 代码逻辑错误:在中断服务程序(ISR)中执行非法操作(如阻塞调用)。
3. 定位步骤
(1) 检查 SysTick 配置
// 确认 SysTick 初始化代码正确(示例):
HAL_SYSTICK_Config(SystemCoreClock / 1000); // 1ms 中断
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); // 时钟源选择
• 关键点:
• 重载值(RVR):若值过小(如 SystemCoreClock /