Eclipse + GNU ARM + STM32 - HAL o SPL

10

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

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

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

Mi pregunta es sobre el complemento 'paquetes'. Al igual que todos los principiantes, estoy confundido en cuanto a si usar el nuevo STM HAL o el SPL más antiguo.

Entiendo que HAL ha implementado la abstracción a un nivel en el que se puede denominar Arduino equivalente para arm. SPL, por otro lado, proporciona la abstracción suficiente para que la codificación sea más rápida, pero aún debe negociar en el nivel de chip.

Con este entendimiento, me gustaría seguir con SPL para entender 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í, ¿puede alguien indicarme cómo usar SPL con mi configuración?

    
pregunta Ankit

3 respuestas

6

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 indicador de comandos de Windows; no IDE. Los paquetes en eclipse probablemente lo obligarían a usar la HAL (ya que dentro de la carpeta de 'Paquetes' descargados para eclipse, solo veo los módulos de HAL).

La HAL en sí misma IMO parece tener muchas capas de lo necesario. Mientras que acceder directamente a los registros se vuelve aburrido y difícilmente se puede leer. El SPL parece justo. clive1, el gurú en el foro de st.com, también prefiere el SPL sobre HAL. Aquí está mi pregunta en ese foro ... podría ser útil.

1

No tengo ninguna experiencia con HAL, pero usé SPL muchas veces para salvar mis tiempos. En mi opinión, la comunidad objetivo de estos procesadores integrados son 2 grupos: Primer grupo que no está interesado en comprometerse con las capas de hardware. Programadores de software, aficionados habituales y arduinos, adoradores de la frambuesa. Si estás en este grupo, parece que HAL es una buena opción para ti. Segundos 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 querer saber qué están haciendo básicamente. luego, si tiene este grupo y tiene tiempo suficiente 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 quieres decidir solo entre las 2 opciones anteriores: HAL tiene un futuro mejor gracias a la compatibilidad con ST ', pero SPL es una forma más fácil de entender para un nuevo motor de arranque. Tal vez esto pueda ayudar a enlace

    
respondido por el Mahmoud Hosseinipour
1

Obtenga este IDE: System Workbench para STM32 : es gratuito, basado en Eclipse y tiene tanto arm-gcc y openocd en un paquete.

Y sobre las bibliotecas: además de SPL y HAL ahora existe LL. Cada uno tiene algunas ventajas y desventajas, y debe elegir lo que necesita. Y, según tengo entendido , todos ellos tienen un estado experimental para ST. Debajo de mis calificaciones a cada uno de ellos:

  • SPL: viejo, engorroso, sin uso de RAM adicional, flexible
  • HAL: real, engorroso, uso adicional de RAM, no flexible
  • LL: real, ligtweigth, sin uso de ram extra, flexible

Breve descripción de mis calificaciones:

  • engorroso - gran uso de flash, "super" funciones universales para trabajar con periferia
  • uso adicional de RAM: se trata de HAL, tiene una copia del estado periférico en las estructuras ubicadas en RAM y se usa en todas partes y siempre
  • 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 (la gente intenta reinicializar HAL para recibir byte por byte de usart >_< , todas las funciones para TIM + DMA se implementan para reescribir el registro TIM y no cualquier otro ...)

Para un poco de rehabilitación, HAL: tiene una gran ventaja para los novatos: es suppoted por STMCubeMX.

EDIT:

Me olvido de libopencm3 - es una biblioteca alternativa. No lo he usado.

    
respondido por el imbearr

Lea otras preguntas en las etiquetas