Estoy tratando de generar un reloj de 1,4 MHz usando STM32F103C8Tx usando STM32CubeMX.
En primer lugar, en mi código tengo el pin PB13 como salida y en principal lo alterno cada dos segundos. Esto funciona.
Ahora la parte más importante. Cosas que he configurado en CubeMX:
Compilé el código generado en el IDE de OpenSTM32 y lo subí. El LED parpadea en el intervalo establecido, pero no tengo salida en el pin B5 A7 (Timer3 canal 2). Esto se verifica en el osciloscopio.
Código (principal):
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM3_Init();
//These two lines were manually added
HAL_TIM_Base_Start(&htim3);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
while (1)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_Delay(5000);
}
}
El resto se puede encontrar aquí .
Debe establecer un período para el temporizador en el campo "Contador de período (registro de recarga automática - valor de 16 bits)" (tercera línea). Éste, junto con el prescaler (primera línea) y la frecuencia APB1, determina la frecuencia del temporizador.
La configuración de "Pulso" para las salidas PWM determina el ciclo de trabajo . Todas las salidas PWM para el temporizador 3 tienen la misma frecuencia (la frecuencia del temporizador), pero configuraciones de ciclo de trabajo independientes (una por salida PWM).
Tenga en cuenta que es fácil cometer errores de uno en uno. Esto se aplica tanto al preescalador (por ejemplo, 0 significa dividir por 1) como al período del temporizador. Por ejemplo, en este ejemplo donde la frecuencia APB1 es 48 MHz, la frecuencia es 48 MHz / 3 / 51 = 313,725 kHz (y no, por ejemplo, 48 MHz / 3 / 50 = 320 kHz). Para la configuración de PWM, por otro lado, la configuración es el valor efectivo real (no +1). Los ciclos de trabajo son 45,1 %, 64,7 %, 13,7 % y 5,9 %, respectivamente.
(Tengo una configuración similar para un procesador STM32 diferente, pero también configuré con STM32CubeMX y compilé/ejecuté bajo OpenSTM32. Verifiqué la frecuencia y los cuatro ciclos de trabajo en un osciloscopio (dentro de la precisión de la medición).)
En su caso, suponiendo que la frecuencia APB1 es en realidad 28 MHz, un período de contador de 19 daría exactamente 1.4000000 MHz (28 MHz / 1/20), aunque si está utilizando el oscilador interno no se garantizan más de tres dígitos significativos (I Encontré que el mío estaba errado en aproximadamente un 0,37 %, dentro de la especificación del 1 %. Si establece el pulso PWM en 10, el ciclo de trabajo debería convertirse en 50,0%.
Bence Kaulics
César Chirila
Pedro Mortensen
HAL_TIM_Base_Start(&htim3);
línea no era necesaria (tampoco creo que doliera).Bence Kaulics
Pedro Mortensen