
背景


针对 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 / 1000000),中断频率过高,导致系统无法响应。
• 时钟源:需与系统时钟一致(通常为 HCLK,即 72MHz)。
• 中断使能:确保 SysTick_CTRL_TICKINT_Msk

最低0.47元/天 解锁文章
1736

被折叠的 条评论
为什么被折叠?



