英飞凌
直播中

chunhuahua

9年用户 1362经验值
擅长:接口/总线/驱动
私信 关注

PMG1-S2 MCU SysTick回调未触发是怎么回事?

我使用的是 PMG1-S2 MCU。
我在设备配置工具中启用了 SYStiCK。 我尝试从 LFCLK 或 SYSCLK 设置信号源。 我看到Cy_SysTick_Init 在 cybsp_init() 期间被调用 ,Cy_SysTick_SetCallback 也运行了,但我的回调函数从未被调用。
能否请您指出我可以检查什么来调试这个问题?

回帖(1)

贾伟刚

2024-7-4 16:57:48
当您的 PMG1-S2 MCU SysTick 回调未触发时,您可以按照以下步骤进行调试:

1. **检查初始化代码**:确保您正确调用了 `cybsp_init()` 函数,并且它在您的主函数之前执行。这将确保所有必要的硬件和软件配置都已正确设置。

2. **检查 SysTick 配置**:确保您在设备配置工具中正确启用了 SysTick,并选择了正确的时钟源(LFCLK 或 SYSCLK)。同时,检查 SysTick 的频率设置是否正确。

3. **检查回调函数注册**:确保您正确调用了 `Cy_SysTick_SetCallback()` 函数,并且传入了正确的回调函数地址。如果回调函数没有被注册,它将不会被调用。

4. **检查回调函数实现**:检查您的回调函数是否正确实现。确保函数签名与 `Cy_SysTick_Callback` 类型匹配,例如:

   ```c
   void MySysTickCallback(void)
   {
       // 您的回调逻辑
   }
   ```

5. **检查中断使能**:确保您的 MCU 中断使能已经打开。在 PMG1-S2 MCU 中,您需要确保 NVIC(嵌套向量中断控制器)已经使能了 SysTick 中断。您可以使用以下代码来使能 SysTick 中断:

   ```c
   NVIC_EnableIRQ(SysTick_IRQn);
   ```

6. **检查中断优先级**:确保 SysTick 中断的优先级设置正确。如果其他中断的优先级更高,它们可能会抢占 SysTick 中断的执行。您可以使用以下代码来设置 SysTick 中断的优先级:

   ```c
   NVIC_SetPriority(SysTick_IRQn, 0); // 0 表示最高优先级
   ```

7. **使用调试器**:如果您仍然无法解决问题,可以尝试使用调试器来跟踪代码执行。设置断点在 `MySysTickCallback` 函数和 `Cy_SysTick_SetCallback` 函数调用处,以检查它们是否被正确调用。

8. **检查硬件问题**:如果以上步骤都无法解决问题,可能存在硬件问题。检查您的开发板和连接,确保它们工作正常。

通过以上步骤,您应该能够找到导致 SysTick 回调未触发的原因,并进行相应的修复。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分