Eclipse + GNU ARM + STM32 - HAL o SPL

Comenzaré con el desarrollo ARM (después de 2 años de AVR) y he adquirido la placa STM DISCOVERY con el microprocesador stm32f4.

Decidí usar eclipse + ARM gcc porque no me gusta el límite de código en Keil y no tengo el dinero para obtener una versión paga.

Siguiendo los tutoriales, instalé eclipse junto con gcc ARM tools + openocd + make utils, etc.

Mi pregunta es sobre el complemento 'paquetes'. Como todos los principiantes, estoy confundido sobre si usar el nuevo STM HAL o el antiguo SPL.

Tengo entendido que HAL ha implementado la abstracción a un nivel en el que puede denominarse equivalente de Arduino para brazo. SPL, por otro lado, proporciona suficiente abstracción para hacer que la codificación sea más rápida, pero aún debe lidiar con el nivel de chip.

Con este entendimiento, me gustaría seguir con SPL para comprender mejor las cosas en lugar de usar HAL.

Lo que me gustaría saber es si el uso de paquetes para STM me obliga implícitamente a usar HAL. Si es así, ¿alguien puede indicarme cómo usar SPL con mi configuración?

"los tutoriales" son un poco vagos, por lo que no sé sobre "el complemento de 'paquetes'" y no tengo idea de qué es SPL (¿biblioteca periférica STM?) o SPCL. Tal vez simplemente no estoy calificado para esta pregunta, pero trabajar con STM32 durante más de dos años me hizo preguntarme...
SPL es Standard Peripheral Library , por otro lado tampoco conozco SPCL.
La forma preferida y admitida de STM en la actualidad es usar STM32CubeMX, que genera código basado en HAL. Y debo admitir que es bastante útil, aunque no soy fanático de las herramientas automatizadas, ya que ocultan cosas importantes.
Aunque debería ser mayormente compatible con otras versiones SPL del procesador STM32, no creo que ST tenga SPL para STM32F7.
Perdón por el bit SPCL. Eso fue un error. Todavía me estoy acostumbrando a los acrónimos. También lo comprobé dos veces y mi placa es la variante stm32f4. Otro error. Aún así, las preguntas generales siguen en pie, ¿cómo uso la biblioteca periférica estándar con eclipse?
@EugeneSh. Aprecio y entiendo que es útil, pero siento que, como principiante, sería bueno para mí estar expuesto a los detalles reales para poder aprender. Una vez que me sienta cómodo y sepa lo que sucede detrás de escena, usar HAL sería un buen ahorro de tiempo.

Respuestas (3)

El SPL, como veo, no tiene nada que ver con el IDE que está utilizando. Simplemente puede incluir los módulos relevantes (por ejemplo, stmf4xx_dma.c y stmf4xx_dma.h) en su proyecto y usar las funciones expuestas (y descritas muy bien) en los archivos .c y .h. De hecho, he estado aprendiendo sobre el núcleo stmf411 con gcc, openocd y SPL usando solo el símbolo del sistema de Windows; sin ID. Los paquetes en eclipse probablemente lo obligarían a usar HAL (ya que dentro de la carpeta 'Paquetes' descargada para eclipse, solo veo módulos HAL).

El HAL en sí mismo, en mi opinión, parece mucho más estratificado de lo necesario. Mientras que acceder a los registros directamente se vuelve tedioso y difícilmente legible. El SPL parece correcto. clive1, el gurú del foro st.com, también prefiere SPL a HAL. Aquí está mi pregunta en ese foro ... podría ser útil.

Necesito ayuda con USART en Nucleo stmf411

Estoy totalmente de acuerdo contigo en eso. HAL parece haberse pasado de la raya con todo el concepto de abstracción. Aunque con él uno desarrollaría programas más rápido, realmente no aprendería qué está sucediendo exactamente, lo que creo que es esencial para el aprendizaje y para estar preparado para el futuro. Como prueba, creé un proyecto en uvision y seleccioné soporte heredado en lugar de paquetes de software y parece haber incluido los archivos SPL. También gracias por el enlace!

No tengo ninguna experiencia con HAL, pero usé SPL muchas veces para ahorrar tiempo. En mi opinión, la comunidad objetivo de estos procesadores integrados son 2 grupos: El primer grupo que no está interesado en comprometerse con las capas de hardware. Programadores de software, aficionados habituales y Arduino, adoradores de Raspberry. Si está en este grupo, parece que HAL es una buena opción para usted. Seconds que proviene de la comunidad electrónica y de hardware, que prefieren

GPIO_A->PIN &= ~(1 << 15);

a

LED_On(1)

para encender el LED y quiere saber lo que están haciendo básicamente. entonces, si está en este grupo y tiene suficiente tiempo para leer el manual de referencia y el manual de programación de su MCU, tal vez la programación de nivel de registro sea otra opción. pero si desea decidir entre solo las 2 opciones anteriores: HAL tiene un mejor futuro debido al soporte de ST, pero SPL es una forma más fácil de entender para un nuevo principiante. Tal vez esto pueda ayudar http://www.eevblog.com/forum/microcontrollers/stm32-and-their-hal-library/

Gracias por el enlace, interesante lectura! Tienes razón, para los principiantes, SPL parece la mejor manera de aprender (y esta es la forma que también he elegido). Por cierto, en tu respuesta debería ser LED_Off

Obtenga este IDE: System Workbench para STM32 : es gratis, está basado en Eclipse y tiene arm-gcc y openocd en un solo paquete.

Y sobre librerías: además de SPL y HAL ahora existen LL. Cada uno tiene algunas ventajas y desventajas, y debes elegir lo que necesitas. Y según tengo entendido , todos ellos tienen estado experimental para ST. Debajo de mis calificaciones a cada uno de ellos:

  • SPL: antiguo, engorroso, sin uso adicional de RAM, flexible
  • HAL: real, engorroso, uso adicional de ram, no flexible
  • LL: real, peso ligero, sin uso adicional de RAM, flexible

Breve descripción de mis calificaciones:

  • engorroso: gran uso de flash, funciones "súper" universales para trabajar con la periferia
  • uso adicional de RAM: se trata de HAL, tiene una copia del estado periférico en las estructuras ubicadas en RAM y lo usa en todas partes y en todo momento
  • no es flexible, y nuevamente sobre HAL, tiene muchas funciones para diferentes casos, ¡pero! la mayoría de ellos no son utilizables para dispositivos reales (las personas intentan reinicializar HAL para recibir byte por byte de usart >_<, todas las funciones para TIM+DMA se implementan para reescribir el registro TIM y ninguna otra...)

Para rehabilitar un poco a HAL: tiene una gran ventaja para los novatos: es compatible con STMCubeMX.

EDITAR:

Me olvidé de libopencm3 , es una biblioteca alternativa. no lo he usado