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?