Usando una placa STM32F429I-DISCO. SYSCLK está configurado a 180 MHz. Verifiqué el valor del pin de salida MCO2, y es correcto. Configuración del canal 1 de GPIO_AF3_TIM9, y necesita una salida de 12.288 MHz y un ciclo de trabajo del 50%. Valores de configuración calculados como:
const uint32_t TIMF = 180000000;
const uint32_t TFOUT = 12288000;
uint16_t ARR = (TIMF / TFOUT) - 1;
uint16_t uhPrescalerValue = ((SystemCoreClock) / TIMF) - 1;
uint16_t pulse = ARR/2 + 1;
Los resultados son prescalar = 0, ARR = 13, pulso = 7.
Aquí está el código de configuración:
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF3_TIM9;
GPIO_InitStruct.Pin = GPIO_PIN_CHANNEL1;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct)
TimHandle.Instance = TIMx;
TimHandle.Init.Prescaler = uhPrescalerValue;
TimHandle.Init.Period = ARR;
TimHandle.Init.ClockDivision = 0;
TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
if(HAL_TIM_PWM_Init(&TimHandle) != HAL_OK)
{
Error_Handler();
}
sConfig.OCMode = TIM_OCMODE_PWM1;
sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfig.OCFastMode = TIM_OCFAST_DISABLE;
sConfig.Pulse = pulse;
if(HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
La salida en el contador de alcance muestra la frecuencia PWM como 12.8582 MHz. El ciclo de trabajo es correcto. ¿Dónde me he equivocado al derivar los parámetros?