Cambio de parámetros de PWMs en la placa STM32

0

Estoy intentando cambiar los valores de Prescaler, Autaregación y Pulso de PWM utilizando la comunicación Serial en un stm32 Nucleo-F091RC. En su mayor parte, puedo hacerlo ya que el código siguiente funciona bien:

void HAL_UART_RxCpltCallback (UART_HandleTypeDef * huart) {

NO UTILIZADO (huart);

...

else if (myRxData [0] == '1') {

  int x;
  int var;
  pre2=0;
  aut2=0;
  pul2=0;
  for(x = 1; x < 6; x++)
  {
      var=myRxData[x]-'0';
      pre2=(pre2*10)+var;
  }

  for(x = 6; x < 11; x++)
  {
      var=myRxData[x]-'0';
      aut2=(aut2*10)+var;
  }

  for(x = 11; x < 16; x++)
  {
      var=myRxData[x]-'0';
      pul2=(pul2*10)+var;
  }


  __HAL_TIM_SET_PRESCALER(&htim2,pre2);
  __HAL_TIM_SET_AUTORELOAD(&htim2,aut2);
  __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, pul2);

}

Pero cuando intento cambiar a los valores de 2 PWM simultáneamente, de este modo:

else if (myRxData [0] == '4')   {

  int x;
  int var;
  pre14=0;
  aut14=0;
  pul14=0;

  pre3=0;
  aut3=0;
  pul3=0;

  for(x = 1; x < 6; x++)
  {
      var=myRxData[x]-'0';
      pre14=(pre14*10)+var;
      pre3=(pre3*10)+var;
  }

  for(x = 6; x < 11; x++)
  {
      var=myRxData[x]-'0';
      aut14=(aut14*10)+var;
      aut3=(aut3*10)+var;
  }

  for(x = 11; x < 16; x++)
  {
      var=myRxData[x]-'0';
      pul14=(pul14*10)+var;
      pul3=(pul3*10)*var;
  }
  __HAL_TIM_SET_PRESCALER(&htim3,pre3);
  __HAL_TIM_SET_AUTORELOAD(&htim3,aut3);
  __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, pul3);

  __HAL_TIM_SET_PRESCALER(&htim14,pre14);
  __HAL_TIM_SET_AUTORELOAD(&htim14,aut14);
  __HAL_TIM_SET_COMPARE(&htim14, TIM_CHANNEL_1, pul14);

}

Uno de los PWM deja de funcionar.

Esto también sucede si simplemente trato de actualizar un PWM dos veces utilizando los __HAL_TIM_SET en main ():

  __HAL_TIM_SET_PRESCALER(&htim3,pre3);
  __HAL_TIM_SET_AUTORELOAD(&htim3,aut3);
  __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, pul3);

   HAL_Delay(1000);      

  __HAL_TIM_SET_PRESCALER(&htim3,pre3);
  __HAL_TIM_SET_AUTORELOAD(&htim3,aut3);
  __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, pul3);

Se actualizará una vez, pero en la segunda actualización dejará de funcionar.

¿Qué estoy haciendo mal?

    
pregunta rungekutta

0 respuestas

Lea otras preguntas en las etiquetas