Skip to main content
toddberk
Associate II
November 10, 2010
Question

Timer One Pulse Mode issues

  • November 10, 2010
  • 11 replies
  • 2559 views
Posted on November 10, 2010 at 09:58

Timer One Pulse Mode issues

    This topic has been closed for replies.

    11 replies

    John F.
    Associate III
    May 17, 2011
    Posted on May 17, 2011 at 14:14

    Or do this ... (without the remap if you want)

    #include ''stm32f10x.h''

    void RCC_Configuration(void);

    void GPIO_Configuration(void);

    void Timer1_Configuration(void);

    //note with SYSCLK_FREQ_72MHz defined, PCLK1 = 36MHz and PCLK2 = 72MHz

    uint16_t CCR1_Val = 1000; //1500 = 1.5ms (1000 = 1ms, 2000 = 2ms);

    int main(void)

    {

      RCC_Configuration();

      GPIO_Configuration();

      Timer1_Configuration();

      while(1)

      {

        ;

      }

    }

    void RCC_Configuration(void)

    {

      //Setup the microcontroller system. Initialize the Embedded Flash Interface, 

      //initialize the PLL and update the SystemFrequency variable.

      SystemInit();

     

      // Enable GPIOB, AFIO and Timer1 clocks

      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO | RCC_APB2Periph_TIM1, ENABLE);

    }

    void GPIO_Configuration(void)

    {

      GPIO_InitTypeDef GPIO_InitStructure;

      //partial remap of Timer1

      GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1, ENABLE);

      //GPIOB Configuration: TIM1 channel 2N as alternate function push-pull

      GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0;

      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

      GPIO_Init(GPIOB, &GPIO_InitStructure);

    }

    void Timer1_Configuration(void)

    {

      //Timer1 is clocked by PCLK2 = 72MHz

      TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

      TIM_OCInitTypeDef  TIM_OCInitStructure;

      TIM_DeInit(TIM1);

      //Time base configuration

      TIM_TimeBaseStructure.TIM_Prescaler = 71; //clocked at 72MHz / 72 = 1MHz

      TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

      TIM_TimeBaseStructure.TIM_Period = 19999; //period = (72MHz / 72) / 20000 = 50Hz (20ms period)

      TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

      TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

      /* Channel 1 Configuration in PWM mode */

      TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

      TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

      TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;

      TIM_OCInitStructure.TIM_Pulse = CCR1_Val;

      TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;

      TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;

      TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;

     

      TIM_OC2Init(TIM1, &TIM_OCInitStructure);

      TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);

      TIM_CtrlPWMOutputs(TIM1, ENABLE);

      //TIM1 enable counter

      TIM_Cmd(TIM1, ENABLE);

    }