Acabo de recibir mi pedido a los chinos del kit ARM de Waveshare, aunque ya hace días hice un pedido a Amidata, de una Discovery, Beaglebone black, PIC32 Ehternet Starter kit y varias pantallas LCD que necesitaba. Lo primero que he cogido es la Discovery, y el primer plantemiento es que entorno de desarrollo y compilador usar.
Opciones hay varias, de pago y gratuitas. De las de pago, la más conocida es la de Keil, pero a menos que uno quiera gastarse varios miles de euros o trabajar con una demo que está limitada a 32K de programa, lo ideal será trabajar con producto gratuito, que además no tiene nada que envidiar al de pago.
Como curiosidad, esta es la tarifa de precios, del distribuidor de Keil en España, una soberana
BARBARIDAD (para ver los precios en dólares, dividir por 0,77):
1 /1 MDK-Professional.................................................................................. € 7.450,00
2 /1 MDK-Standard...................................................................................... € 3.950,00
3 /1 MDK-ARM-CM....................................................................................... € 2.600,00
Como producto gratuito tenemos
Coocox+GCC o
Eclipse+GCC. Decir que Coocox es una MARAVILLA, se instala y funciona practicamente sin configurar nada, desde el minuto cero, es un excelente entorno para ARM. También me decidí a probar Eclipse+GCC porque al ser un entorno más abierto, se puede usar con otros entornos de hardware-software, como JAVA para Android, Raspberry o Beaglebone con C, etc...
En este post voy a detallaros como instalar y configurar Eclipse y GCC, para ARM, sobre Windows, y en concreto para la tarjeta Discovery con el STM32F407VG. La historia ha sido larga, me he tirado como 2 días dándome de cabezazos, porque la información que hay por internet es muy confusa, parcial, contradictoria, obsoleta y a veces erronea. Pero al final lo conseguí, he sudado sangre, pero funciona TODO, Editor, compilador, programador y Debug.
Vamos allá, Programas necesarios (todos GRATUITOS):1.- Eclipse, como IDE, descargar el paquete "
Eclipse IDE for C/C++ Developers", esto es importante porque viene preconfigurado para C/C++.
http://www.eclipse.org/downloads/2.- GCC, es el compilador de C.
https://launchpad.net/gcc-arm-embedded3.- ST-Link, programa y drivers, para programar los microcontroladores ARM STM32 de ST.
http://www.st.com/web/en/catalog/tools/PF258168http://www.st.com/web/en/catalog/tools/PF2581674.- OpenOCD, sirve para que la tarjeta se comunique con Eclipse para hacer DEBUG
http://www.freddiechopin.info/en/download/category/4-openocd5.- Make, utilidad para poder automatizar el proceso de compilación y "linkage".
http://gnuwin32.sourceforge.net/downlinks/make-bin-zip.phpDescargar e instalarlos todos.
Sobre
OpenOCD, instalarlo en
C:\OpenOCD, según se ve en esta imagen.
En cuanto a
Make, una vez descargado y descomprimido, solo teneis que coger el archivo
Make.exe del directorio BIN y copiarlo al directorio
C:\OpenOCD\binEn Windows XP, ir al panel de control, Sistema, Opciones Avanzadas, pulsar sobre el botón "
Variables de Entorno". En otras versiones de Windows supongo que habrá algo parecido para definir los PATH del sistema.
En
Variables del Sistema seleccionar
PATH y pulsar modificar, al final del campo "
Valor de variable", añadir "
;C:\openocd\bin", tal como se ven en la imagen:
Arrancar Eclipse:
Nos saldrá la pantalla Workspace launcher, aqui podemos poner el directorio en el que Eclipse guardará todos nuestros proyectos.
En Eclipse, vamos a instalar un par de productos que nos harán falta para que funcione el Debug, es posible que uno de ellos ya lo lleve instalado el paquete, pero mejor instalarlo para asegurarnos. En la barra de herramienta de Eclipse seleccionamos Help > Install New Software.
Nos saldrá la pantalla de instalación, pulsar el opción "
Available Software Sites"
En esta pantalla, es importante que estén seleccionadas las opciones CDT, de hecho las otras podríamos desmarcarlas, para que la búsqueda sea más rápida. Darle al OK.
Desplegar el campo "Work With", y seleccionar la linea que empieza con CDT, o --All available sites", si escogemos CDT iremos directos al grano y la descarga de la lista de paquetes de software disponibles, será más rápida.
Una vez se descargue la lista de paquetes disponibles, tenemos que marcar en
"CDT Main Features", el paquete "
C/C++ development tools", y en "
CDT Optional Features" los paquetes "
C/C++ GDB Hardware Debugging" y "
C99 LR Parser", pulsar Next para seguir, los paquetes se descargarán e instalarán.
Una vez instalados, podemos ver todos los paquetes y plugins que tenemos instalados, comprobemos que lo anterior se ha descargado e instalado, para ello pulsaremos sobre "What is
already installed".
Para probar la compilación y el Debug, vamos a crear un proyecto y volcar un fuente de ejemplo, algo sencillo, un programita que enciende los LEDs de la Discovery, en secuencia, sobre este programa probaremos la compilación, grabación del chip y Debug. VAmos a la barra de herramientas de Eclipse y pulsamos File > New > C Project.
En la pantalla C Project seleccionamos "Empty project" bajo Makefile Project y "Cross GCC" bajo Toolchains, en Project Name le ponemos el nombre que queramos para nuestro proyecto, yo he puesto PRUEBAS, pulsamos Finish.
Se ha creado el proyecto PRUEBAS, pero está vacío, ahí podemos añadir nuestro código fuente, ficheros .C, .H, etc, pero en este caso voy a importar un código fuente que ya existe, y que se añadirá al proyecto, es un programa sencillito para encender los leds de la Discovery en secuencia, suficiente para probar la compilación, grabación y Debug. Seleccionamos la opción
IMPORT en el menú
File.
En la pantalla Import, marcamos General > File System, pulsamos Next.
En esta pantalla, pulsamos Browse, para seleccionar el directorio donde tenemos los fuentes que serán importados al proyecto.
Seleccionamos de nuestro disco duro, el directorio de los fuentes que queremos importar al proyecto
Marcamos todos los ficheros que aparecen en las dos ventanas, y pulsamos "
Finish".
Los archivos se han añadido al proyecto, ya podemos empezar a configurar y probar.
Como en este caso, además de los fuentes, también están el objeto compilado .BIN y el fichero de símbolos para Debug .ELF, vamos a borrar estos archivos, ya que si intentamos compilar, el compilador parece que comprueba la fecha de fuentes y objeto, y si la fecha de los fuentes es más antigua que la de los objetos, no compila, ya que entiende que no es necesario. Así que borramos los archivos .BIN y .ELF para probar la compilación.
Ahora ya podemos probar a compilar el proyecto, para eso pulsamos el icono "Build All" de la barra de herramientas, es el séptimo icono por la izquierda de la esquina superior izquierda de la barra de herramientas de Eclipse, también es accesible por Project > Build All, o pulsando Ctrl + B. Si todo va bien, vereis como sale la ventana "Building WorkSpace" indicando el proceso, en la ventana de la Consola se indica lo que va compilando y linkando y si el proceso termina sin errores.
Ahora que ya hemos compilado el programa, vamos a programar el chip. Eclipse no integra directamente la programación del chip, algo que si que hace Coocox, pero podemos añadir fácilmente un icono para que llame al programador "
STM32-STLINK Utility" de ST, que ya instalamos al principio, para eso desplegaremos el icono de la barra de herramientas de Eclipse, tal como se ve en la imagen, y pulsaremos "
External Tools Configurations".
En esta pantalla salen dos opciones que a vosotros no os saldrán, porque es precisamente lo que tenemos que crear, una para lanzar el programador y la otra para poder configurar el Debug. Ahora vamos a crear el icono para lanzar el programador. Para crear esta opción, pulsar dos veces sobre "Program" o pinchar sobre el primer icono por la izquierda, se creará una nueva linea bajo "Program", podeis llamarla como querais, yo le he puesto "PROGRAMADOR", ese nombre lo podeis poner en el campo "Name". En esta pantalla hay que poner en el campo "Location", el enlace completo al ejecutable del programador, si habeis instalado el software STM32 STLink Utility, como se indicó al principio, y no habeis tocado la vía de acceso, podeis poner exactamente lo mismo que aparece en esta pantalla, si habeis cambiado la vía de instalación, pulsar "Browse File System", y seleccionar el ejecutable del programador STM32 ST-LINK Utility.exe.
Ahora pulsaremos sobre la pestaña "Build", y desmarcaremos la opción "Build before Launch".
Pulsamos sobre la pestaña "Common", y marcamos el icono "External Tools", pulsamos Apply y Close para guardar.
Ya estamos en situación de lanzar el programador de ST, desde Eclipse, para poder grabar el chip. Desde la barra de herramientas de Eclipse, deplegamos el icono que aparecen en la imagen, y ya podremos ver la opción que acamos de crear con el nombre "PROGRAMADOR", pulsemos sobre esta opción. Se abrirá y ejecutará el programador de ST para nuestra Discovery. Para micros de otros fabricantes, el proceso es el mismo, pero instalando el software que nos de el fabricante, y poniendo la llamada al programa correspondiente. Ya podemos ver el programador STM32 ST-LINK Utility.
Debemos de tener la tarjeta Discovery conectada al puerto USB, y con los drivers instalados, como ya vimos. Para conectar con la tarjeta pulsaremos el tercer icono por la izquierda, con forma de enchufe negro y amarillo, el software conectará con la tarjeta, si todo va bien, nos indicará en la esquina superior derecha "Device Informatión", el tipo de chip.
Ahora vamos a seleccionar el fichero .BIN de nuestro programa, para grabarlo en el micro de la tarjeta, el fichero .BIN se generó al compilar el programa. Pulsamos sobre el sexto icono por la izquierda (hoja de papel y lapiz, o eso parece), se abrirá la ventana de la imagen, pulsaremos Browse para seleccionar el fichero .BIN a grabar.
El software empieza a grabar el fichero .BIN en el micro de nuestra tarjeta Discovery.
Desde este software, podemos también, leer, borrar y verificar, pulsando sobre los iconos y menús correspondientes. En la siguiente imagen, borrando el chip, pulsando sobre el quinto icono por la izquierda.
Ahora vamos a configurar el OPENOCD, este software es parte del sistema necesario para realizar DEBUG. Desplegamos de nuevo el icono Run, y pulsamos sobre "External Tools Configurations".
Tenemos que crear una nueva opción, pulsando sobre "Program" dos veces o sobre el primer icono por la izquierda, se añadirá una nueva linea bajo "Program", yo la he llamado OPEN OCD como se puede ver en la imagen, ese nombre se puede cambiar en el campo "Name".
En esta pantalla tenemos que poner la llamada al programa openocd.exe, si lo hemos instalado como dije en pasos anteriores, ese programa estará en C:\openocd\bin\openocd.exe", y esa es la vía que hay que poner en el campo "Locatión", tal como se muestra en esta imagen, también podeis localizarlo pulsando sobre la opción "Browse File System", poner también "C:\openocd\bin" en el campo Working directory.
Finalmente teneis que escribir en la ventana
Arguments lo siguiente, "
-f board/stm32f4discovery.cfg", esto para la tarjeta Discovery, pero en el directorio "
board" de OpenOCd tenemos 142 archivos para otras tantas tarjetas y chips distintos.
Pulsamos sobre la pestaña "Build" y desmarcamos "Build before launch".
Pulsamsos sobre la pestaña "Common" y marcamos la opción "External Tools". Pulsamos Apply y Close para guardar.
Vamos a probar el OpenOCD, para eso desde la barra de opciones de Eclipse, desplegamos el Icono Run y nos aparecerá la opción que acabamos de crear, "OPENOCD", pulsamos sobre esta nueva opción.
En la ventana de la Consola, que normalmente está situada en la parte baja de Eclipse, veremos el siguiente mensaje, que nos indica que OPENOCD está funcionando.
Ahora vamos a crear el segundo proceso, necesario para poder hacer Debug, se trata del proceso GDB, de estos procesos hay que crear uno para cada proyecto, en el que indicaremos el programa a Debugear (fichero .ELF), y la vía de acceso para ejecutar el servidor GDB. Desde la barra de menues de Eclipse, desplegaremos el icono con forma de cucaracha verde, y selecionaremos "Debug Configurations".
Sobre esta pantalla, posicionaremos el puntero del ratón sobre "GDB Hardware Debugging" y pulsaremos dos veces, se creará una nueva linea debajo.
A esta configuración yo la he llamado DEBUG, como se puede ver en la imagen, podeis poner el nombre en el campo Name. Aquí tenemos que poner la vía de acceso completa al fichero .ELF de nuestro proyecto, podemos buscarlo pulsando sobre el botón "Browse". Los ficheros .ELF contienen los símbolos necesarios para hacer el Debug. En el campo Project, pondremos el nombre de nuestro proyecto, podemos seleccionarlo pulsando sobre el botón "Browse" de Project.
Pulsamos sobre la pestaña "Debugger", aquí hay que poner en el campo "
GDB Command" el nombre del programa ejecutable del servidor GDB, este programa lo instala el compilador GCC que ya hemos instalado anteriormente, si no habeis cambiado el directorio de instalación, coincidirá con el que aparece en esta imagen, de lo controlario podeis localizarlo pulsando sobre el botón Browse, el nombre del ejecutable es "
arm-none-eabi-gdb.exe". Además en el campo "
Port Number" teneis que poner
3333, este dato es muy importante, si poneis otro número, el Debug
NO funcionará, lo digo por experiencia después de estar horas probando y probando sin que me funcionase.
Pasamos a la pestaña
Startup, aqui hay que poner "
monitor reset halt" en la ventana que se ve en la imagen.
Pasamos a la pestaña
Common y marcamos el icono
Debug, pulsamos
Apply y a continuación pulsamos sobre la opción "
Select Other" que aparece a la izquierda del botón Apply.
Se abrirá una nueva ventana, pulsamos "
Change Worskspace Settings".
Seleccionamos
GDB Hardware Debugging y
Debug en la ventana de la izquierda, y en la ventana de la derecha marcamos "
Standard GDB Hardware Debug", pulsamos OK, también OK en la siguiente pantalla, y finalmente Apply y CLose en la última pantalla.
Ya tenemos totalmente configurado el DEBUG, es hora de probarlo. Para ejecutar un Debug, son necesarios dos procesos, el primero es
OPENOCD y el segundo es
GDB, ambos ya los hemos configurado y creado para poder lanzarlos con comodidad desde la barra de herramientas de Eclipse. Antes ya configuramos y probamos el OPENOCD, si lo habeis cerrado o habeis cancelado el proceso OPENOCD que abrimos anteriormente, tendremos que lanzarlo de nuevo, estos serán siempre los pasos a realizar para lanzar el Debug, primero ejecutar el OPENOCD y luego lanzar el GDB, ambas opciones ya las tenemos configuradas, solo hay que ejecutarlas desde la barra de herramientas de Eclipse. Asi que lancemos primero el OPENOCD.
Comprobemos que en la ventana de la consola sale este mensaje, que nos indica que OpenOCD se está ejecutando:
Ahora toca lanzar el GDB, para ello seleccionaremos la entrada
DEBUG que creamos anteriormente. Si funciona, entraremos en modo Debug, Eclipse cambiará la pantalla al modo Debug, donde tendremos todas las opciones típicas para hacer Degug, marcar BreakPoint, avanzar paso a paso, ver variables, etc....
Si todo ha ido bien, veremos una pantalla similar a esta, en la esquina superior derecha veremos el botón Degug activado, y a su izquierda el botón C/C++ que podemos pulsar para pasar al modo de trabajo, aunque eso no significará que se pare el Debug. Para parar el Debug hay que pulsar sobre el icono cuadrado rojo que aparece en la parte superior de la pantalla, según se ve en esta imagen. Ahora estamos en modo Degug, podremos hacer todas las tareas tradicionales de una sesión de Debug, es un entorno muy cómodo, me recuerda bastante a Visual Studio, por ejemplo para ver el estado de una variable, basta con poner el puntero del ratón sobre esa variable.
Y con esto y un bizcocho, se acabó, ha sido una tarea
MUY COMPLEJA, por más que he buscado por Google, no hay nada claro y detallado (como lo que yo he redactado), casi todo es confuso, parcial, contradictorio, no funciona o da errores no documentados, con versiones antiguas de Eclipse, algunos procedimientos que he localizado en Google precisan parte de programas comerciales como Atollic, o emplean otros entornos para el compilador como Cygwin. Paquetes como Yagarto o el de Olimex instalan una version del compilador antigua, que no reconoce los ARM Cortex M4, una pesadilla.
Otro día, instalación y configuración de Coocox, aunque ese será MUY FACIL, es el más recomendable si SOLO quereis trabajar sobre microcontroladores ARM en C. Para los que tenemos intención de trabajar, además, con otros entornos de Hardware-Software, por ejemplo JAVA para Android, C para Raspberry o Beaglebone, Eclipse es la mejor opción, aunque resulte tan extramadamente farragosa su instalación y configuración.