Skip to main content
Visitor II
October 13, 2010
Question

stm8s TIM1’s One Pulse Mode problem

  • October 13, 2010
  • 2 replies
  • 637 views
Posted on October 13, 2010 at 08:42

stm8s TIM1’s One Pulse Mode problem

    This topic has been closed for replies.

    2 replies

    Visitor II
    May 17, 2011
    Posted on May 17, 2011 at 15:10

    Hi kadyrov,

    Try to generate an update event before enabling counter. Hope that solves.

    TIM1_DeInit();

     

     

    TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 0xFF, 10);

     

     

    TIM1_OC1Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_DISABLE, 0x7F, TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_LOW, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_RESET);

     

     

    TIM1_SelectOnePulseMode(TIM1_OPMODE_SINGLE);

     

    /* generate update event */

     

    TIM1->EGR |= 0x01; /* or something like that */

     

     

    TIM1_CtrlPWMOutputs(ENABLE);

     

     

    TIM1_Cmd(ENABLE);

     

     

    Tell me if it is OK.

    Regards,

    MCU Lüfter

     

    Visitor II
    May 17, 2011
    Posted on May 17, 2011 at 15:10

    Oh, problem is solved! Thanks lowpowermcu!

    TIM1->EGR is set to 0x01 in TIM1_DeInit(), but then it is disabled in TIM1_OC1Init() for some reason. I set it by TIM1_GenerateEvent(TIM1_EVENTSOURCE_UPDATE) again and now Update Event occurs at the right moment. Here is fixed code:

    TIM1_DeInit();

     

    TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 0xFF, 10);

     

    TIM1_OC1Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_DISABLE, 0x7F, TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_LOW, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_RESET);

     

    TIM1_SelectOnePulseMode(TIM1_OPMODE_SINGLE);

     

    TIM1_GenerateEvent(TIM1_EVENTSOURCE_UPDATE);

     

    TIM1_CtrlPWMOutputs(ENABLE);

     

    TIM1_Cmd(ENABLE);

    Hi kadyrov,

    Try to generate an update event before enabling counter. Hope that solves.

    TIM1_DeInit();

     

     

    TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 0xFF, 10);

     

     

    TIM1_OC1Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_DISABLE, 0x7F, TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_LOW, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_RESET);

     

     

    TIM1_SelectOnePulseMode(TIM1_OPMODE_SINGLE);

     

    /* generate update event */

     

    TIM1->EGR |= 0x01; /* or something like that */

     

     

    TIM1_CtrlPWMOutputs(ENABLE);

     

     

    TIM1_Cmd(ENABLE);

     

     

    Tell me if it is OK.

    Regards,

    MCU Lüfter