Estoy usando una placa STM32F103 ( Blue Pill ), y tengo una aplicación sencilla donde Necesito tener dos pulsos en diferentes pines.
Logro esto usando Timer3 y Timer4 configurados con salida PWM en dos canales (uno cada uno). El problema es que los temporizadores no se inician al mismo tiempo y tienen un desplazamiento de aproximadamente 3 µs. El reloj principal funciona a 28 MHz.
En el código, cambiar el orden de estas dos líneas determinará qué temporizador comienza primero (cuál de ellas está adelante con 3 µs de la otra):
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2);
¿Hay algo que pueda hacer? Se debe tener en cuenta que en el mismo programa tengo Timer1 configurado como Capture Compare No Output, y Timer2 para generar un reloj de 1.4 MHz de la misma manera que Timer3 y Timer4.
Edición posterior. La función llamada en el controlador HAL:
HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
/* Enable the Capture compare channel */
TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);
if(IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
{
/* Enable the main output */
__HAL_TIM_MOE_ENABLE(htim);
}
/* Enable the Peripheral */
__HAL_TIM_ENABLE(htim);
/* Return function status */
return HAL_OK;
}