STM32
直播中

fansz

8年用户 1243经验值
擅长:制造/封装
私信 关注
[问答]

为什么STM8S的TIM4一直进不了中断?

#include "tim4.h"
#include "led.h"

void TIM4_IT_UPDATE_Init(void)
{
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4, ENABLE);

  TIM4_DeInit();//复位定时4

  ////128分频,自动重装载值125,16Mhz/(128*125)=1Khz
  TIM4_TimeBaseInit(TIM4_PRESCALER_128, 0x7D);
  TIM4_SetCounter(0x7D);
////  TIM4_ARRPreloadConfig(ENABLE);        //自动重装
//  TIM4_UpdateDisableConfig(DISABLE);    //运行计数器溢出更新
//  TIM4_UpdateRequestConfig(TIM4_UPDATESOURCE_REGULAR);
  TIM4_ClearFlag(TIM4_FLAG_UPDATE);     //清楚更新标志位
  TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);//更新中断使能


  TIM4_Cmd(ENABLE);//使能定时器4
}

#pragma vector=0x19
__interrupt void TIM4_OVR_UIF_IRQHandler(void)//对应IAP的中断地址:0x8060
{

  int count=0;//每1ms进入一次中断
  count++;
//  GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);
  if(count==1000)//1s中转换一次
  {
    GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);
  }
  TIM4_ClearITPendingBit(TIM4_IT_UPDATE);

}



一直进不了中断,在线调试发现,TIM4->SR中的中断标志位UIF=1后,就一直没有被清楚,说明一直没有进中断。。。麻烦各位大侠帮忙解答一下,STM8S的资料实在是太少了。。。手册都写的很模糊。。。


回帖(1)

王尚岱

2024-5-15 16:43:06
1. 确保您已经正确地包含了所需的头文件。您已经包含了"tim4.h"和"led.h",但请确保这些文件中包含了所有必要的定义和函数。

2. 确保您的中断向量表中包含了TIM4的中断服务例程。在您的汇编启动文件中(通常是"startup_stm8s.s"),您需要添加以下行:

   ```
   .globl _TIM4_UPD_OVF_TRG_COM_IRQHandler
   _TIM4_UPD_OVF_TRG_COM_IRQHandler:
       jp TIM4_IRQHandler
   ```

3. 确保您的中断服务例程(例如TIM4_IRQHandler)已经正确实现。您需要在其中添加以下代码:

   ```c
   void TIM4_IRQHandler(void) interrupt 8
   {
       if (TIM4_GetITStatus(TIM4_IT_UPDATE) != RESET)
       {
           TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
           // 在这里添加您的中断处理代码
       }
   }
   ```

4. 确保您的定时器配置是正确的。您已经设置了定时器的时钟、预分频器和自动重装载值。请检查这些值是否符合您的要求。

5. 确保您已经启用了TIM4的中断。在您的TIM4_IT_UPDATE_Init函数中,您需要添加以下代码:

   ```c
   TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
   ```

6. 最后,确保您的中断使能位已经设置。您需要在您的主函数(通常是"main")中添加以下代码:

   ```c
   enableInterrupts();
   ```


举报

更多回帖

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