STM32 PWM solo funciona correctamente cuando salgo en dos variables no utilizadas: StartUpCounter y HSEStatus

0

Estoy utilizando la placa de descubrimiento stm32f3 para intentar generar la señal para una tira de luz ws2812.

Tengo src/system_stm32f30x.c , que copié de los ejemplos de StdPeriph. Actualmente estoy usando el HSI interno, y la velocidad del reloj es de 48MHz.

Estoy usando gcc-arm-none-eabi-4_8-2014q3 para compilar.

Si dejo src/system_stm32f30x.c como está, recibo advertencias del compilador sobre variables no utilizadas, HSEStatus y StartUpCounter, pero mi programa funciona correctamente. Si cambio el nombre de las variables a test1 y test2, todavía funciona como se esperaba, por lo que parece que no importa cómo se llamen las variables, solo importa que estén ocupando memoria (supongo).

Sin embargo, si comento estas variables para deshacerme de la advertencia, mi programa ya no funciona correctamente. El primer pulso de la señal PWM es demasiado corto o demasiado largo. Hace que el primer LED de mi tira parpadee de forma errática (aunque el resto de los LED están bien).

Mi código está aquí: enlace

¿Qué podría ser?

    
pregunta synic

1 respuesta

2

¿Está PLL_SOURCE_HSI #defined en su código?

En system_stm32f30x.c , parece que HSEStatus , y StartUpCounter no debería nunca definirse IFF su código usa el oscilador HSI.

Su definición está en el código:

#if defined (PLL_SOURCE_HSI)
...
#else
#if defined (PLL_SOURCE_HSE)
__IO uint32_t StartUpCounter = 0, HSEStatus = 0;

Por lo tanto, parece que algo no está definido PLL_SOURCE_HSI , y por lo tanto permitir que se definan StartUpCounter y HSEStatus .

No puedo ver nada en el archivo fuente src/system_stm32f30x.c para causar eso.

Entonces, cualquiera de los dos:

  1. el archivo src/system_stm32f30x.c en github no es el que se usa en tu compilación, o
  2. tu construcción está causando que PLL_SOURCE_HSI se vuelva indefinido y PLL_SOURCE_HSE por definir (lo que parece poco probable que obtenga ambos), o
  3. el archivo de inclusión stm32f30x.h contiene un error de sintaxis que es causando algo de esto.

1 y 3 parecen más probables.

Esas dos variables son locales a SetSysClock. Así que sus nombres pueden ser cambiados de manera segura.

Comentando su definición debería causar que la compilación de ese archivo fuente falle.

Si la compilación está produciendo un programa, entonces src/system_stm32f30x.c no es parte del programa, o se está utilizando un objeto antiguo, o su incoherencia es la pregunta.

Si el oscilador HSI se usa en un caso, y no en otro, es plausible que el período de PWM sea inconsistente.

    
respondido por el gbulmer

Lea otras preguntas en las etiquetas