STM32F030F4 Timer3 no funciona

0

Uso STM32F030F4 en el paquete TSSOP-20 y el temporizador no funciona. Intento encontrar un ejemplo para STM32F103 y funciona muy bien.

Aquí está el ejemplo de código que uso:

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

GPIO_InitTypeDef GPIO_Config;
GPIO_Config.GPIO_Pin = GPIO_Pin_6;

GPIO_Config.GPIO_Mode = GPIO_Mode_AF;
GPIO_Config.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Config.GPIO_OType = GPIO_OType_PP;
GPIO_Config.GPIO_PuPd = GPIO_PuPd_NOPULL;

TIM_TimeBaseInitTypeDef timer;
TIM_OCInitTypeDef timerPWM;

TIM_TimeBaseStructInit(&timer);
timer.TIM_Prescaler = 0;
timer.TIM_Period = 100;
timer.TIM_ClockDivision = 0;
timer.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &timer);

TIM_OCStructInit(&timerPWM);
timerPWM.TIM_OCMode = TIM_OCMode_PWM1;
timerPWM.TIM_OutputState = TIM_OutputState_Enable;
timerPWM.TIM_Pulse = 50;
timerPWM.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OC1Init(TIM3, &timerPWM);
TIM_Cmd(TIM3, ENABLE);

TIM3->CCR1 = 50;
    
pregunta user3771501

1 respuesta

2

Aquí está el código de inicialización del temporizador 3 generado por el STM32CubeMX:

/* TIM3 init function */
void MX_TIM3_Init(void)
{
  TIM_MasterConfigTypeDef sMasterConfig = {0};
  TIM_OC_InitTypeDef sConfigOC = {0};

  htim3.Instance = TIM3;
  htim3.Init.Prescaler = 5;
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim3.Init.Period = 400;
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 0;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  {
    Error_Handler();
  }
  HAL_TIM_MspPostInit(&htim3);

}

Y dentro de HAL_TIM_MspPostInit (& htim3) aquí está el código relacionado con la inicialización del pin:

__HAL_RCC_GPIOA_CLK_ENABLE();
/**TIM3 GPIO Configuration    
PA6     ------> TIM3_CH1
PA7     ------> TIM3_CH2 
*/
GPIO_InitStruct.Pin = PWM_ISO_Pin|PWM_LED_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

Noté que te falta esta declaración: 'GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;' lo que significa que establece el pin como Alternate_Function pero se olvida de establecer a qué AF se debe asignar. Espero que ayude.

    
respondido por el romain145

Lea otras preguntas en las etiquetas