cancel
Showing results for 
Search instead for 
Did you mean: 

STM32F4 PWM genertation using TIM1 and TIM8

anoop
Associate II
Posted on April 15, 2012 at 14:51

I am using the STM32F4 discovery board to generate a PWM signal using TIMER 1, channel 1, and am using GPIO A8 in AF mode. When i run the code there is no pulse generated, but the pin A8 gets pulled up to Vcc.

 The above mentioned happens for TIMER 8 too(Channel 1, GPIO PC6). I did not have any problem configuring the other Timer's. Since i intend to use the repetition counter i have to work with Timer 1 and Timer 8. I would really appreciate it if someone could help me out here.

The code i attached below:

#include ''stm32f4_discovery.h''

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

TIM_OCInitTypeDef  TIM_OCInitStructure;

uint16_t CCR1_Val = 250;

uint16_t PrescalerValue = 0;

void TIM_Config(void);

int main(void)

{

  /* TIM Configuration */

   TIM_Config();

  PrescalerValue = (uint16_t) ((SystemCoreClock /2) / 28000000) - 1;

  /* Time base configuration */

  TIM_TimeBaseStructure.TIM_Period = 665;

  TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;

  TIM_TimeBaseStructure.TIM_ClockDivision = 0;

  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

  /* PWM1 Mode configuration: Channel1 */

  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

  TIM_OCInitStructure.TIM_Pulse = CCR1_Val;

  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

  TIM_OC1Init(TIM1, &TIM_OCInitStructure);

  TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);

   

  TIM_ARRPreloadConfig(TIM1, ENABLE);

  /* TIM 1 enable counter */

  TIM_Cmd(TIM1, ENABLE);

 

  while (1)

  {}

}

void TIM_Config(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;

  /* TIM1 clock enable */

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

 

  /* GPIOA clock enable */

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

 

  /* GPIOC Configuration: TIM1 CH1 (PA8) */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8  ;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

 

  /* Connect TIM1 pins to AF2 */  

  GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_TIM1);

                                                            

}

#ifdef  USE_FULL_ASSERT

/**

  * @brief  Reports the name of the source file and the source line number

  *         where the assert_param error has occurred.

  * @param  file: pointer to the source file name

  * @param  line: assert_param error line source number

  * @retval None

  */

void assert_failed(uint8_t* file, uint32_t line)

{

  /* User can add his own implementation to report the file name and line number,

     ex: printf(''Wrong parameters value: file %s on line %d\r\n'', file, line) */

  while (1)

  {}

}

#endif

1 REPLY 1
Posted on April 15, 2012 at 15:17

...

  /* TIM1 counter enable */

  TIM_Cmd(TIM1, ENABLE);

  /* TIM1 Main Output Enable */

  TIM_CtrlPWMOutputs(TIM1, ENABLE);

...

Tips, Buy me a coffee, or three.. PayPal Venmo
Up vote any posts that you find helpful, it shows what's working..