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

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?

Instalé Codesourcery en LinuxhUbuntu y apilé un poco: PATH está bien, pero el programa no aparece en el tablero o 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ás
@TomRitzmann PeterJ tiene razón, no use las respuestas para hacer preguntas. Además, los problemas de software están fuera de tema aquí, SuperUser es el lugar correcto.
El libro en línea The Embedded Rust Book en URL docs.rust-embedded.org/book/intro/index.html utiliza la placa STM32 Discovery en sus tutoriales. Consulte también GitHub en github.com/rust-embedded/discovery
Consulte también la documentación, los seminarios web y los recursos de aprendizaje de ST en st.com/content/st_com/en/support/learning/…

Respuestas (8)

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 buenas páginas 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-de-stm32f4-arm-development-toolchain/ y http://jethomson.wordpress.com/2011/11/17/getting-started-with-the-stm32f4discovery-in-linux/

Sin embargo, encontré el último enlace 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á indicadores de compilación diferentes, y la secuencia de comandos del enlazador será ligeramente diferente para cada uno (aunque en realidad solo debido a los cambios en los tamaños 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 propio STM32, por lo que una vez que haya instalado 'stlink' para que pueda actualizar a la placa, puede simplemente descargar una imagen de ese sitio, activarla y luego conectarse con una aplicación de terminal y empezar a programar.

Aquí hay una lista de placas Discovery STM32x compatibles con OpenOCD: github.com/openrisc/openOCD/tree/master/tcl/board (busque "discovery" usando su navegador)

Si le gustan más los editores de texto y los Makefiles en lugar de usar una GUI, podría 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) todo de la comunidad repo, o https://launchpad.net/gcc-arm-embedded (que se puede encontrar en Archlinux' AUR como gcc-arm-none-eabi-bin).
  • Decida si desea usar y qué biblioteca desea usar para acceder al hardware. Desde la parte superior de mi cabeza, hay tres opciones comunes:
    1. Ninguno. Escribes todo desde cero. No recomendable para principiantes.
    2. STM32Cube : AC lib proporcionada por el propio ST.
    3. Libopencm3 : una biblioteca de código abierto que admite muchos núcleos cortex-m de diferentes proveedores.
    4. STM32PLUS : una biblioteca de 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 lib, escriba su propio archivo MAKE, secuencia de comandos del enlazador, código de inicio y ejecute un archivo MAKE simple. 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 haya terminado, cree un proyecto y genere el código para "Truestudio". Eso debería darle un punto de partida con un script de enlace, 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, STM32CubeMX es excelente para calcular los valores del árbol del reloj y validar si puede configurar el chip de la manera que piensa.
    3. Con libopencm3: obtenga los ejemplos de libopencm3 , encuentre un ejemplo que coincida con su tablero y utilícelo como punto de partida. Los ejemplos deben estar listos para ejecutarse. Simplemente escriba "hacer". Luego use ese ejemplo como punto de partida para su propio desarrollo.
    4. Con STM32Plus: no sé. Perdón.
  • Lleve su proyecto a la junta. Cualquiera de los usos

    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 provisto en la placa. Openocd es excelente, pero la documentación no siempre es la mejor. En caso de duda, únase al canal openocd irc. La gente allí es muy agradable.
  • Codifique en un editor de texto y utilice herramientas de línea de comandos. Este tutorial proporcionará muchos consejos.

Disfrutar

Eclipse , GCC y OpenOCD es una cadena de herramientas. Lo recomienda 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 si necesita ayuda para compilar 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 parte del proyecto debería funcionar con

make CROSS_COMPILE=/path/to/arm-2011.03/bin/arm-none-eabi-
¡Gracias! No había visto esos enlaces antes. Me sorprende que no haya una guía más definitiva en alguna parte, ya que los diferentes tableros de descubrimiento tienen banderas de compilación sutilmente diferentes.
Sí, ST hizo una placa muy barata y las regaló, miles de ellas, 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 tienen un buen nombre, y encontrar un IDE y una cadena de herramientas que funcionen bien juntos de forma gratuita no es demasiado fácil.

He tenido éxito con https://github.com/JorgeAparicio/bareCortexM (ver también las publicaciones de blog vinculadas). Estoy asombrado de poder simplemente recorrer el código de un solo paso o explorar la memoria del dispositivo en lugar de insertar declaraciones de depuración en mi código o adivinar qué está pasando 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 tableros de descubrimiento. Siguiendo las instrucciones e instalando los complementos de Eclipse recomendados, pude usar mi STM32VLDISCOVERY en Ubuntu.

Como se recomienda, he combinado la plantilla de eclipse con la biblioteca de plantillas libstm32pp C++ del mismo autor para el hardware STM32. libstm32pp proporciona un reemplazo sorprendentemente completo para CMSIS y los controladores STM32, a 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()casi todo compilado en línea debido a las plantillas de C++. La configuración es muy agradable.

Ya no recomiendo bareCortexM sin mantenimiento; echa un vistazo a stm32plus en andybrown.me.uk/wk
El problema con tales controladores de dispositivos es que son ineficientes. Para controladores de dispositivos de alta velocidad adecuados que no desperdicien ciclos de CPU, necesita un rtos debajo para que pueda programar correctamente.

Tal vez sería útil para alguien: mi artículo breve (sobre ruso) y 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.

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

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

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.

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.

Considere la plataforma . Si se siente cómodo con la línea de comandos, encontrará que platformio facilita considerablemente el proceso de desarrollo. pio initse puede utilizar 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.