[STM32F2] SysTick 定时器中断在同款 MCU 的自制板上却始终不触发

[复制链接]
127|0
我在 Cube MX 生成的代码中,卡在 HAL_SysTickInit 相关部分已经 4 天了。我使用的工具和硬件如下:
CubeIDE
HAL 驱动固件层
FreeRTOS 中间件
Nucleo-F207zg 开发板
自制 PCB电路非常简单 —— 通过 32 引脚连接器读写 GPIO,以及 8 个来自机械开关的 GPIO 输入经 8 个过孔引出,MCU 型号为 F207zg
ST-Link 调试器用 Nucleo 开发板自带
SEGGER 调试器(用于通过 SWD 接口调试自制板)
我通过 Cube MX 配置了时钟和系统基准定时器,使用生成的代码进行初始化等操作。添加了一些引脚读写相关的线程,应用程序在 Nucleo 开发板上运行正常。
我的测试应用非常简单:一个任务用于翻转 5 个数字输出引脚(其中 3 个对应 Nucleo 开发板上的 LED),另一个任务用于读取 5 个上拉输入的数字引脚,之前运行一切正常。
之后,我对代码做了非常少的修改 —— 比如一些引脚映射调整,以适配自制 PCB。
开始执行后,我发现 HAL_Init 会调用 HAL_InitTick,该函数的执行流程如下:
配置 TIM6 的中断优先级
使能 TIM6 全局中断
使能 TIM6 时钟
获取时钟配置信息
获取 APB1 预分频系数
初始化 TIM6
调用 HAL_TIM_Base_Init,返回 HAL_OK
调用 HAL_TIM_Base_Start_IT(启动定时器并设置中断使能标志 —— 执行完__HAL_TIM_ENABLE_IT (timer, 1) 语句后,DIER 寄存器被设为 1)
最终使能外设,返回 HAL_OK
从流程来看,中断使能已经配置完成,理论上每毫秒线程应该跳转到对应的中断服务程序(ISR)—— 即 HAL_TIM_IRQHandler (),该函数会调用其回调函数 HAL_IncTick。
但是,线程从未跳转到该中断服务程序。我设置了断点,但没有任何触发。从 HAL_Init 函数退出后,应用线程也无法配置时钟系统。我认为核心问题在于滴答计数(tick count),它不依赖于时钟配置。
这个问题最让我无法理解的是:同样的初始指令(仅依赖 HAL 库),在 Nucleo 开发板的 MCU 上能正常工作,换到同款 MCU 的自制板上却不行。
是 MCU 外设损坏了吗?如何排除 MCU 损坏的可能性?IDE 的运行选项显示,固件下载已验证通过,执行下载过程中没有出现任何错误。代码大部分都是 HAL 库和 Cube MX 生成的

您需要登录后才可以回帖 登录 | 注册

本版积分规则

59

主题

61

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部