进不了定时器2更新中断,求解脱

2019-07-19 21:56发布

main.c:
#include "stm8s.h"
uint16_t Baifenbi = 0;
void main(void)
{    
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
  CLK_CCOConfig(CLK_OUTPUT_CPU); 
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2,ENABLE);
   
  
  TIM2_TimeBaseInit(TIM2_PRESCALER_1,254);
  TIM2_OC1Init(TIM2_OCMODE_PWM1,TIM2_OUTPUTSTATE_ENABLE,Baifenbi,TIM2_OCPOLARITY_HIGH);  
  TIM2_OC1PreloadConfig(ENABLE);
  TIM2_CCxCmd(TIM2_CHANNEL_1, ENABLE);   
  TIM2_UpdateDisableConfig(ENABLE);
  TIM2_ITConfig(TIM2_IT_UPDATE,ENABLE); 
  TIM2_ClearFlag(TIM2_FLAG_UPDATE);     
  TIM2_Cmd(ENABLE); 
  enableInterrupts(); // 开总中断 
  while (1)
  {
      TIM2_SetCompare1(Baifenbi);
  }
}

stm8s_it.c:
 INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)
 {
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
   static uint16_t Time = 0;
    FlagStatus fs;
    fs = TIM2_GetFlagStatus(TIM2_FLAG_UPDATE);
    //fs=RESET or SET
    if(fs == SET)
    {
      TIM2_ClearFlag(TIM2_FLAG_UPDATE);  
      Time++;
      if(Time == 10)
      {
        Time = 0;
        Baifenbi++;
        if(Baifenbi>255)Baifenbi = 0;
      }
    }

 }

求救,为什么没进入中断,但可以输出PWM,证明时钟有动,但没进入中断响应
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
kuge995
2019-07-20 07:21
回复【2楼】正点原子:
---------------------------------
。。。。。问题已经解决了,问题是:TIM2_UpdateDisableConfig(ENABLE);这个是Disable更新失效使能,所以没波形


但出现新问题,根据上面的周期我调出了62.5KHz的PWM,但每次进入更新中断16us,我在更新中断中:
static uint16_t Time = 0; 
      Time++;
      if(Time == 62500)
      {
        Time = 0;
        Baifenbi+=20;
        if(Baifenbi>256)
        {
          Baifenbi = 0;
          GPIO_WriteReverse(GPIOB, GPIO_PIN_5);
        }
      }
发现时间跟1s有几百毫秒的出入,导致时间一直不准确,请问是什么原因

一周热门 更多>