Depuración de un microcontrolador ARM (STM32) con Qt Creator

He estado trabajando con microcontroladores ARM de la serie STM32 en IAR Embedded Workbench durante un tiempo. Por alguna razón, ahora necesito mover mis trabajos a Qt-Creator (tanto en Windows como en Linux). En IAR EWARM, las cosas son más simples: nunca tuve que lidiar con secuencias de comandos de vinculación o archivos de inicio, simplemente abra una plantilla de proyecto IAR EWARM de la versión Peripheral Library de ST y con algunos ajustes simples, está lista. De todos modos, intenté crear un nuevo proyecto para STM32F4 en Qt pero me encontré con varios problemas.

¿Hay alguien que pueda explicar este proceso claramente, paso a paso ? Con el archivo MAKE relacionado, la secuencia de comandos del enlazador, los archivos de inicio y del sistema si es posible.

Nota: En realidad, tengo un montón de preguntas específicas sobre el tema, pero como creo que una explicación de todo el proceso puede ser útil para mí y para otros novatos integrados, decidí hacer la pregunta de esta manera.

¿A qué llamas "entorno Qt"? ¿Te refieres al uso de Qt-Creator? ¿O quiere que su programa se ejecute en una aplicación Qt? ¿O quiere ejecutar un programa basado en Qt en STM32? no me queda claro..
Quiero compilar mi código C en Qt-Creator y descargarlo a la mCU. Edité la pregunta.
No creo que sea una gran idea. Será mucho dolor para una herramienta que no se ajusta realmente a la necesidad. ¿Por qué no eliges algo como CooCox o GNU ARM Eclipse ?
O si no le gustan los IDE basados ​​en eclipse, pruebe CodeBlocks . Tiene un buen soporte de cadena de herramientas integrado.
@Antoine, Qt es la única opción en el trabajo por ahora. Pero definitivamente probaré CodeBlocks en casa, gracias.

Respuestas (4)

De hecho, trabajo con esta configuración, funciona de maravilla.

Primero asegúrese de usar una versión reciente de Qt Creator. Descargué el mío del sitio web. En algunos repositorios de Linux está desactualizado y no es compatible con el complemento BareMetal y/o QBS (que es bastante útil).

Requisitos:

  • Creador de Qt (descarga desde el sitio de QT)
  • ARM GCC (Ubuntu: apt-get install gcc-arm-none-eabi)
  • Archivo fuente de GDB (descargar del archivo )
  • OpenOCD (Ubuntu: apt-get install openocd)

Versiones utilizadas: Qt Creator 3.6.0, ARM GCC 4.8.2-14ubuntu1+6, ARM GDB 7.6/7.10 con soporte para python y OpenOCD 0.7.0.

1) Instale Qt Creator. Abra Ayuda -> Acerca de los complementos. Busque la categoría Soporte de dispositivos y verifique BareMetal.

2) Vaya a Herramientas -> Opciones. Hay algunas configuraciones que necesitamos crear y ajustar para compilar para un controlador ARM Cortex.

a) Vaya a "Bare Metal" (última categoría) - agregue un depurador de su elección. Yo personalmente uso OpenOCD. En este punto, puede configurar la conexión a gdb y su puerto, así como los comandos de inicio. Los comandos estándar están configurados para chips STM32F4xx, pero supongo que puede modificarlos para que funcionen con cualquier controlador ARM Cortex.

b) Vaya a "Dispositivos". Agregue un nuevo dispositivo, elija Bare Metal y el proveedor de GDB que acaba de crear. No hay nada más que configurar aquí.

c) Vaya a "Construir y ejecutar" - pestaña Depuradores. Esto ha sido lo más complicado de hacer.

Necesita una versión arm gdb con soporte para secuencias de comandos de python . En ese momento (hace unos 9 meses cuando escribo esta publicación), los archivos binarios en el repositorio de Ubuntu no tienen esta opción. Puede ahorrar mucho tiempo/molestias comprobando si esto ha cambiado.

Sin embargo, si necesita compilar GDB con soporte de python, aquí le mostramos cómo hacerlo. Descarga GDB desde los archivos de descarga . Todavía uso GDB-7.6 que parece funcionar bien, pero para este tutorial lo he recompilado para GDB-7.10.

Extraiga el archivo fuente. Abra en la terminal y ejecute "./configure --with-python --target=arm-elf". Esto configura el entorno de creación para objetivos ARM con secuencias de comandos de python habilitadas. Luego ejecuta hacer. Esto toma un tiempo, dependiendo de la velocidad de su sistema. Desafortunadamente, puede estar un poco solo una vez que la compilación se detiene debido a problemas de dependencia. No tengas miedo: ¡esto también me sucedió en mi primer intento y lo descubrí con un montón de búsquedas en Google! Si Python falla, asegúrese de instalar el paquete python2.x-dev (verifique su versión no, probablemente 2.7). Suponiendo que la compilación haya ido bien, puede encontrar el ejecutable gdb en el directorio principal.

Si está en Mac, es probable que el proceso sea similar. Pero no estoy familiarizado con OSX. Si está en Windows, lo siento, tendrá que buscar un poco en Google sobre cómo hacer esto con Mingw o lo que sea (honestamente, no lo sé). O tal vez encuentre binarios que tengan este soporte habilitado.

Una vez que haya adquirido un ejecutable gdb, llámelo, por ejemplo, "ARM GDB" y establezca la ruta. Personalmente, no me molesto en colocarlo en /usr/bin/, pero supongo que podría hacerlo.

Esta ventana arrojará un error si usa un ejecutable gdb que no está compilado con Python Scripting.

d) Pestaña "Construir y ejecutar" - "Compiladores"

Cree un nuevo "compilador GCC" y llámelo "ARM GCC". Para la ruta, use "/usr/bin/arm-none-eabi-gcc". El "ABI" no es realmente importante, solo lo configuré en arm-unknown-unknown-unknown-32bit.

e) Pestaña "Construir y ejecutar" - "Kits". Agregue un nuevo kit, llamé al mío "ARM Bare Metal". Tipo de dispositivo: "Bare Metal" Dispositivo: señale el dispositivo que ha creado con su servidor OpenOCD/St link GDB Sysroot: déjelo vacío Compilador: ARM GCC Depurador: ARM GDB Qt Versión: Ninguno - Obviamente no puede ejecutar el tiempo de ejecución de QT en una corteza m4! Herramienta Cmake: sin usar

Asegúrese de que no haya advertencias en ninguna de las pestañas Build & Run

3) Haga su proyecto make/qmake/QBS. En el lado izquierdo, vaya a la pestaña "proyectos" y en la parte superior izquierda agregue el kit "ARM Bare Metal". Esto debería funcionar sin errores. Su proyecto puede comenzar con un kit de escritorio. Reemplazar generalmente no funciona. En ese caso, agregue un kit ARM y luego retire el de escritorio.

4) Inicie su servidor OpenOcd. Utilizo un descubrimiento STM32F4 para el desarrollo y también programación externa para mis propias placas STM32. Para cualquier objetivo STM32F40x/STM32F41x ejecute:

openocd -f tablero/stm32f4discovery.cfg

Esto inicia un servidor gdb en el puerto 3333 y un servidor telnet (para comandos OpenOCD) en 4444. Como acceso directo, creo algunos archivos .sh en mi directorio de inicio para un inicio rápido de un servidor GDB.

5) Inicie la sesión de depuración. Debe programar y ejecutar!

Puede establecer puntos de interrupción, recorrer el código, incluso más PC, ver la pila de llamadas, variables (locales / ver) y desensamblar. Estoy realmente satisfecho con esto, pero obviamente le faltan algunas cosas como: 1) "Vista de registro". Sí, tiene uno, pero eso es solo los registros de la CPU. Quiero registrar la vista de mis periféricos también. 2) Descargue el progreso o información más detallada sobre el estado de la conexión. Debe consultar openocd para esto.

editar: He puesto un proyecto de ejemplo en este repositorio de Github . Contiene esta publicación con algunas capturas de pantalla de diálogo agregadas, así como un proyecto parpadeante para la placa Discovery STM32F4 usando un proyecto QBS en Qt Creator.

¿Qué gana exactamente usando Qt Creator como una cadena de herramientas?
Creo que una gran parte de la preferencia personal. Puedo apreciar la versatilidad de Eclipse, pero no puedo soportar lo lentos que son los IDE de Java. CodeBlocks también se mencionó anteriormente, supongo que no hay mucha diferencia. Ambos son IDE para C/C++ con depuración GDB. Me gusta el sistema de compilación QBS, pero no es obligatorio. Ya uso Qt, por lo que es bueno permanecer dentro de 1 entorno para la codificación. Probablemente haya soluciones comerciales mucho mejores disponibles, pero a menudo no son multiplataforma o están fuera del presupuesto para muchos aficionados o equipos pequeños.
Usé Qt y Qt Creator para la única aplicación de escritorio que he escrito, y ni en un millón de años habría pensado que la gente lo estaba usando para el desarrollo integrado. Algo nuevo cada día...
Hay muchos caminos que conducen a Roma. Supongo que cualquier IDE que hable con GDB se usará en algún momento para el desarrollo multiplataforma o integrado. Visual Studio también puede comunicarse con OpenOCD a través del complemento VisualGDB, por lo que puede usarse (se está utilizando) para el desarrollo de ARM. OTOH también podría escribir un script que ejecute un Makefile y llame a una herramienta de línea de cmd JTAG para cargar su imagen binaria en su tablero. Puede usar Vim y depurar a través de serial/scope. No se necesita ninguna interfaz o depurador que admita pasos de código. Si eso es lo que funciona para ti, también está bien, ¿verdad? :-)
Gracias por el aviso sobre el complemento bareMetal. Recuerdo haberlo oído mencionar una vez y luego lo olvidé.

Descargue e instale GCC-ARM , OpenOCD y ST-Util . STM32CubeF4 es opcional pero obligatorio.

Agregue un compilador y un depurador personalizados como se muestra en la imagen a continuación en Tools->Options->Build & Run .

ingrese la descripción de la imagen aquí

Aprenda a usar OpenOCD, GDB y ST-Flash.

Sitios sugeridos:

Cubrir toda la configuración de QtCreator

http://www.bartslinger.com/cx-10-quadcopter/debugging-stm32-from-qtcreator/

Proyecto bare metal simple para STM32 (es mío)

https://vilacoder.wordpress.com/category/arm/

Un buen punto de partida para ti es wiki.qt.io/Building_Qt_5_from_Git

También encontrará todo lo que necesita en su documentación, que se encuentra en doc.qt.io.

Obtendrá el mejor soporte en su foro oficial forum.qt.io/category/4/qt-development .

Esta es una pregunta más SO, y no para SE EE.

Gracias, voy a revisar estos. Por cierto, primero hice esta pregunta en SO y no pude obtener una respuesta durante media hora, así que decidí hacerla aquí.
Obtenga STM32Cube para generar un proyecto para la herramienta Eclipse SW4STM32... obtiene un proyecto Eclipse. QT puede importar esto directamente, o puede mirar el archivo MAKE que genera en <yourproject>/Your Proj config>/debug/makefile. Es posible que tenga que compilarlo primero para generar el archivo MAKE

Si desea compilar Qt dirigido a STM32, la respuesta corta es: ¡Olvídelo!

Por qué ? Qt está destinado a ejecutarse en Windows o Linux como mencionas. Pero no es posible ejecutar esos sistemas operativos en un STM32 porque carece de MMU, memoria, energía, etc.

Si desea portar Qt a un nuevo sistema operativo o un evento completo, ¡el camino será muy largo!

No creo que el póster original quiera portar Qt a un microcontrolador. En cambio, quiere saber cómo hacer que un proyecto se ejecute usando Qt cuando se comienza desde cero. El OP es bastante claro sobre el uso de Windows y Linux.
El OP no quiere Qt en STM32, solo quiere usar Qt Creator (el IDE) para el desarrollo de STM32.