¿Cómo desarrollo para el descubrimiento de STM32 en Linux? [cerrado]

26

Tengo una placa de descubrimiento STM32 y me gustaría poder programarla en Linux.

¿Cuál es la forma más fácil de hacer esto?

Gordon Williams
fuente
Instalé Codesourcery en LinuxhUbuntu y apilé un poco: PATH está bien pero el programa no aparece en el tablero ni en el centro de software. Tal vez sea el Ubuntu que cambiaría de alguna manera, pero no sé cómo. Si tienes una idea, por favor escribe. Gracias. Tom
Tom Rert
1
@TomRitzmann PeterJ tiene razón, no use respuestas para hacer preguntas. Además, los problemas de software están fuera de tema aquí, SuperUser es el lugar correcto.
clabacchio

Respuestas:

12

Una manera fácil de programar y depurar la placa STM32 Discovery (o cualquier STM32 que use un programador ST-Link) es usar el proyecto 'stlink' https://github.com/texane/stlink (sin embargo, OpenOCD también parece popular)

Las placas ST Nucleo también aparecen como un dispositivo flash USB, por lo que ni siquiera es necesario stlink, simplemente copie el archivo en ellas.

Hay algunas páginas buenas sobre cómo desarrollar para el descubrimiento de STM32 en Linux, como http://gpio.kaltpost.de/?page_id=131 y http://torrentula.to.funpic.de/2012/03/22/ configuración-the-stm32f4-arm-development-toolchain / y http://jethomson.wordpress.com/2011/11/17/getting-started-with-the-stm32f4discovery-in-linux/

Sin embargo, el último enlace me pareció el más útil. Muestra cómo construir los proyectos STM32 de ST tal como están: el único cambio es agregar su Makefile, que parece una solución perfecta.

En versiones recientes de Ubuntu, hay un paquete que puede instalar que contiene un compilador ARM:

sudo apt-get install gcc-arm-none-eabi

Tenga en cuenta que los procesadores son todos un poco diferentes. STM32F0..4 necesitará diferentes indicadores de compilación, y la secuencia de comandos del enlazador será ligeramente diferente para cada uno (aunque en realidad solo debido a los cambios en el tamaño de RAM y Flash).

Editar: si desea comenzar realmente rápido , también puede consultar http://www.espruino.com . Es un intérprete de JavaScript que se ejecuta en el STM32, por lo que una vez que haya instalado 'stlink' para poder flashear en la placa, simplemente puede descargar una imagen de ese sitio, encenderla y luego conectarse con una aplicación de terminal y comenzar a programar.

Gordon Williams
fuente
Aquí hay una lista de placas de descubrimiento STM32x compatibles con OpenOCD: github.com/openrisc/openOCD/tree/master/tcl/board (busque "descubrimiento" usando su navegador)
rbaleksandar
8

Si le gustan más los editores de texto y los Makefiles en lugar de usar una GUI, puede hacer lo siguiente:

  • Instale una cadena de herramientas que proporcione arm-none-eabi-gcc. En Archlinux, necesitaría community / arm-none-eabi-binutils, arm-none-eabi-gcc y arm-none-eabi-newlib (y arm-none-eabi-gdb si desea depurar) todos de la comunidad repo, o https://launchpad.net/gcc-arm-embedded (que se puede encontrar en Archlinux 'AUR como gcc-arm-none-eabi-bin).
  • Decide si y qué biblioteca quieres usar para acceder al hardware. Desde lo alto de mi cabeza, hay tres opciones comunes:
    1. Ninguna. Escribes todo desde cero. No recomendable para principiantes.
    2. STM32Cube : lib lib de AC proporcionado por el propio ST.
    3. Libopencm3 : una biblioteca de código abierto que soporta muchos núcleos cortex-m de diferentes proveedores.
    4. STM32PLUS : una lib C ++. Sin embargo, no puedo decir mucho más al respecto porque no lo he probado.
  • Crea o copia tu primer proyecto.
    1. Sin una biblioteca, escriba su propio archivo MAKE, script de enlazador, código de inicio y obtenga un archivo MAKE simple en ejecución. Buena suerte ;)
    2. Con STM32Cube: descargue e instale STM32CubeMX . Una vez descomprimido, el archivo * .exe es en realidad solo un archivo java y puede ejecutarlo usando "java -jar filename.exe". La instalación necesita sudo. Cuando termine, cree un proyecto y genere el código para "Truestudio". Eso debería darle un punto de partida con un script de enlazador, código de inicio, alguna función principal trivial (y un archivo MAKE si no recuerdo mal). En realidad, incluso si no usa la biblioteca STM32Cube, el STM32CubeMX es excelente para calcular los valores del árbol de reloj y validar si puede configurar el chip de la manera que usted piensa.
    3. Con libopencm3: Obtenga los ejemplos de libopencm3 , encuentre un ejemplo que coincida con su tablero y úselo como punto de partida. Los ejemplos deberían estar listos para ejecutarse. Solo escribe "make". Luego use ese ejemplo como punto de partida para su propio desarrollo.
    4. Con STM32Plus: no lo sé. Lo siento.
  • Lleve su proyecto a la pizarra. Cualquiera de uso

    1. El cargador de arranque en serie: stm32flash funciona muy bien.
    2. El puerto de depuración: puede usar openocd para hablar con el adaptador de depuración proporcionado en la placa. Openocd es genial, pero la documentación no siempre es la mejor. En caso de duda, únase al canal abierto de irc. La gente de allí es muy amable.
  • Codifique en un editor de texto y use herramientas de línea de comandos. Este tutorial proporcionará muchos consejos.

Disfrutar

mox
fuente
5

Eclipse , GCC y OpenOCD es una cadena de herramientas. Es recomendado por EMCU-IT y hay información adicional aquí . Esas páginas también recomiendan usar un RTOS como FreeRTOS.org , pero eso depende de usted.

Y para obtener ayuda con la compilación de los ejemplos de STM32 en Linux, vaya aquí . Ese enlace apunta a un archivo MAKE para los ejemplos que se pueden invocar con

git clone git://github.com/snowcap-electronics/stm32-examples.git
cd stm32-examples
wget http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32_f105-07_f2xx_usb-host-device_lib.zip
unzip stm32_f105-07_f2xx_usb-host-device_lib.zip

También se documentan un par de correcciones de código menores, pero la mayoría del proyecto debería funcionar con

make CROSS_COMPILE=/path/to/arm-2011.03/bin/arm-none-eabi-
Embedded.kyle
fuente
1
¡Gracias! No había visto esos enlaces antes. Sin embargo, estoy sorprendido de que no haya una guía más definitiva en alguna parte, ya que los diferentes tableros de descubrimiento tienen indicadores de compilación sutilmente diferentes.
Gordon Williams
Sí, ST hizo un tablero muy barato y los regaló, miles de ellos, y el STM32 en sí mismo es un chip increíble, hasta F4, pero programarlos es un gran dolor en el trasero. Sus controladores están increíblemente mal documentados y no están bien nombrados, y encontrar un IDE y una cadena de herramientas que funcionen bien juntos de forma gratuita no es demasiado fácil.
hak8or
1

He tenido éxito con https://github.com/JorgeAparicio/bareCortexM (ver también las publicaciones de blog vinculadas). Estoy convencido de que puedo simplemente pasar un paso por el código o explorar la memoria del dispositivo en lugar de insertar declaraciones de depuración en mi código o adivinar lo que está sucediendo dentro del chip.

El proyecto bareCortexM es una plantilla de Eclipse para desarrollar con la serie Cortex M, especialmente STM32, en C ++ sin un sistema operativo. Está configurado para usar openocd, gcc y tiene scripts para flashear y depurar en varios objetivos, incluidos algunos de los paneles de descubrimiento. Siguiendo las instrucciones e instalando los complementos Eclipse recomendados, pude usar mi STM32VLDISCOVERY en Ubuntu.

Según lo recomendado, combiné la plantilla de eclipse con la biblioteca de plantillas C ++ libstm32pp del mismo autor para el hardware STM32. libstm32pp proporciona un reemplazo sorprendentemente completo para CMSIS y los conductores STM32 menudo criticados con un modelo de programación que le permite decir cosas como PB10::setMode(gpio::cr::GP_OPEN_DRAIN_2MHZ)y PINB::setLow(), o PINB::setHigh()todos en línea sobre todo compilado debido a las plantillas de C ++. La configuración es muy agradable.

joeforker
fuente
Ya no recomiendo el bareCortexM sin mantenimiento; echa un vistazo a stm32plus en andybrown.me.uk/wk
joeforker
El problema con estos controladores de dispositivo es que son ineficientes. Para los controladores de dispositivos de alta velocidad adecuados que no desperdician ciclos de CPU, necesita un rtos debajo para que pueda hacer la programación adecuada.
Martin
0

Tal vez sería útil para alguien: mi breve artículo (en ruso) y un proyecto simple . Todo en Linux y sin cosas innecesarias como eclipse.

Las bibliotecas se tomaron del sitio web de ST, makefile, de uno de los muchos ejemplos de GPL en internet.

Eddy_Em
fuente
0

Aquí hay un proyecto de plantilla pequeño pero innovador para el inicio rápido usando la placa de descubrimiento STM32F0 bajo Linux o cualquier otro sistema operativo:

https://github.com/dobromyslov/stm32f0-chibios-template

Tenga en cuenta que el proyecto utiliza ChibiOS, un sistema operativo en tiempo real gratuito y de código abierto, por lo que no es exactamente una implementación básica desde cero.

Viacheslav Dobromyslov
fuente
0

Uso vim y arm-none-eabi-gcc junto con todas las herramientas habituales de desarrollo de Linux. Linux es, en mi opinión, un entorno de desarrollo superior para el trabajo integrado con diferencia. Para la depuración uso stlink y arm-none-eabi-gdb.

Martín
fuente
0

Considere plataforma . Si se siente cómodo con la línea de comandos, encontrará que la plataforma facilita considerablemente el proceso de desarrollo. pio initse puede usar para configurar un proyecto. pio runaprovecha la cadena de herramientas para compilar. pio run --target uploadenvía el código al dispositivo. Platformio se encarga de descargar los componentes de la cadena de herramientas, las bibliotecas, etc., según sea necesario.

dat
fuente