ST意法半导体
直播中

的撒的

11年用户 814经验值
擅长:可编程逻辑
私信 关注
[问答]

STM32MP151无法产生TIM5全局中断的原因?如何解决?

我使用安装在我自己的板上的 STM32MP151CAA3。
我想在 Cortex-M4 中生成 tiM5 全局中断。

我写了下面的代码,但是,TIM5 全局中断没有发生(TIM5_IRQHandler 没有被调用)。
在 Keil MDK-ARM Debbuger 中,我已确认反映了以下设置。

--TIM5_DIER->UIE = 1
--TIM5_CR1->CEN = 1
--当TIM5 CNT达到TIM5_ARR值时,设置TIM5_SR->UIF。

  • #include "stm32mp1xx_hal.h"
  • void TIM5_Start(void)
  • {
  •         TIM_HandleTypeDef m_handleTim5;
  •         TIM_ClockConfigTypeDef sClockSourceConfig;
  •         TIM_MasterConfigTypeDef sMasterConfig;
  •         __HAL_RCC_TIM5_CLK_ENABLE();
  •         m_handleTim5.Instance = TIM5;
  •         m_handleTim5.Init.Prescaler = 41999;
  •         m_handleTim5.Init.CounterMode = TIM_COUNTERMODE_UP;
  •         m_handleTim5.Init.Period = 0;
  •         m_handleTim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  •         HAL_TIM_Base_Init(&m_handleTim5);
  •         sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  •         HAL_TIM_ConfigClockSource(&m_handleTim5, &sClockSourceConfig);
  •         sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  •         sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  •         HAL_TIMEx_MasterConfigSynchronization(&m_handleTim5, &sMasterConfig);
  •         HAL_NVIC_EnableIRQ(TIM5_IRQn);
  •         TIM5->ARR = (time * 2) - 1;
  •         TIM5->EGR |= TIM_EGR_UG;
  •         TIM5->SR = 0;
  •         HAL_TIM_Base_Start_IT(&m_handleTim5);
  • }
供大家参考,TIM4 global interrupt 不会出现类似情况。
但是TIM6或TIM7全局中断发生没有任何问题。

上面的代码有什么遗漏吗?







回帖(1)

黄乃康

2023-2-6 09:59:02
中断发生只需要发生几件事:


  • TIM_DIER_UIE 位已设置
  • TIM_SR_UIF 已设置
  • 相应的 NVIC 中断被启用
  • 中断已启用且更新中断具有足够的优先级

可能某处有错别字,可能是 TIM5_IRQn 的 NVIC 中断有误或其他原因。看来概率不大。不确定。
举报

更多回帖

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