STM32 - Generador de señales de reloj usando un temporizador - Código generado por STM32CubeMX

4

Estoy intentando generar un reloj de 1.4 MHz usando el STM32F103C8Tx usando STM32CubeMX.

Primero que nada, en mi código tengo el pin PB13 como salida y en main lo alterno cada dos segundos. Esto funciona.

Ahora la parte más importante. Cosas que he configurado en CubeMX:

  • He configurado el reloj base del dispositivo a 28 MHz.
  • TIM3 Channel2: Salida CH2 Generación CH2 PWM
  • Reloj interno
  • Timer3:

HecompiladoelcódigogeneradoenelIDEdesdeOpenSTM32ylohecargado.ElLEDparpadeaenelintervaloestablecido,peronotengosalidaenelpinB5A7(Timer3canal2).Estoseverificaenelosciloscopio.

Código(principal):

intmain(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM3_Init();//ThesetwolinesweremanuallyaddedHAL_TIM_Base_Start(&htim3);HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);while(1){HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);HAL_Delay(5000);}}

Elrestosepuedeencontrar aquí .

    
pregunta Cezar Chirila

1 respuesta

2

Debe establecer un período para el temporizador en el campo "Periodo del contador (Registro de recarga automática - valor de 16 bits)" (tercera línea). Esto, 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 frecuencia misma (la frecuencia del temporizador), pero configuraciones de ciclo de trabajo independientes (una por salida PWM).

Tenga en cuenta que es fácil cometer errores off-by-one. Esto se aplica tanto al prescaler (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 otra parte, 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 compilado / ejecutado bajo OpenSTM32. He verificado 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 tienen más de tres dígitos significativos. garantizado (encontré que el mío está apagado 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 ser 50.0%.

    
respondido por el Peter Mortensen

Lea otras preguntas en las etiquetas