ARM: Hello World

Vale, si ya tienes tu tarjeta STM32F4Discovery o cualquier otra de la misma clase que te interese más, cuando la conectes verás que va programada con unas cuantas cosas de fábrica para que la pruebes. Pero éso es hacer trampas.

Para hacer un simple Hello World, vas a recorrer un camino bastante largo todavía.

¿Puedes programar en ensamblador? Por supuesto, ánimo con ésos registros y sus posiciones de 16 bits. No, vamos a utilizar librerías que nos dan las funciones básicas para no tener que hacerlo todo nosotros.

Sistema de librerías de Keil y ARM

El programa Keil utiliza una referencia a librerías externas que nos facilita el fabricante del microcontrolador y que incluyen el firmware, en éste caso ST, denominada STM32F4-Discovery_FW_V1.1.0 y que podéis descargar aquí (la subo yo para que esté disponible siempre).

Como no va a ser la única librería que descarguemos, ya que vamos a usar otras y a crear las nuestras propias, ésta carpeta irá dentro de otra denominada "terceros", donde pondremos otras. Es importante que sea así para que Keil sepa dónde buscar las librerías cuando bajemos la plantilla y queramos incluirlas.

A su vez la carpeta de "terceros" yo la tengo en una carpeta llamada ARM, donde comparte espacio con las carpetas de proyectos, de forma que no es necesario copiar mil veces las librerías cada vez que se quiera programar algo nuevo. Os ilustro un poco:

arm

La carpeta ARM en el escritorio

ARM2

Dentro de ARM, la carpeta terceros y las distintasd carpetas de proyectos

ARM3

Dentro de terceros, el firmware y otras librerías descargadas o propias

La plantilla

Se puede ver dentro de mi carpeta ARM: "plantilla_ITM_debug". Es una plantilla que contiene un main y las librerías justas y necesarias para que el programador empiece a compilar en vez de soltar mil errores.

Cada vez que hagáis un nuevo proyecto, en lugar de dirigíos a Keil -> Nuevo proyecto, lo que haréis será copiar ésta plantilla y renombrar la carpeta. Ya tendréis entonces un proyecto funcional desde 0.

Ésta tiene de bueno que nos la han preparado con la funcionalidad de debug activa, para poder ver ya de primeras lo que se trama dentro de nuestro microcontrolador.

Y ésta os la dejo aquí.

Pues bien, os descargáis la carpeta, lo dejáis todo en un sistema de carpetas tal como os he propuesto, y abrís el proyecto. Se abrirá el Keil y saldrá algo tal que...

El entorno de Keil

keil

A la izquierda tenéis los archivos que se han incluido al proyecto desde la carpeta de terceros. Ahora veamos la referencia a los archivos .h, a ver si están correctas. En primer lugar en la misma ventanita de la izquierda los archivos que empiezan por stm32... y dan mucho miedo deben tener el simbolito amarillo como una llave y la flecha. Si aparacen en blanco tendrás que cambiar la dirección, que de todas formas os voy a enseñar.

Dirígete a Project -> Options for Tarjet 'Plantilla_ITM_Debug' y saldrá una ventana así:

keil2

AVISO: si salen menos opciones en las pestañas es un bug del programa, ciérrala y vuélvela a abrir. Los cambios que realices cuando está el programa bugueado no se guardarán.

Ahora dirígete a la pestaña C/C++, asegúrate de que el texto en Define está escrito igual que como se muestra a continuación, que la optimización está en Level 0 (no optimizado), y abre la pestaña a la derecha de Include Paths.

keil3

Si tenías el problema de que no te aparecían los simbolitos de las llaves, tendrás que borrar todos los directorios que hay e incluirlos de nuevo tal como están pero con tus carpetas. Ahora vuelve a las pestañas de Options y realiza los siguientes cambios:

  • En Debug, haz click en "Use:" y selecciona en el menú desplegable "ST-Link Debugger". Haz click en "Settings" justo a la derecha y selecciona "Port: SW". De vuelta a Debug, marca la casilla "Run to main()"

keil4

  • En Utilities, marca "Use Target Driver For Flash Programming", "Use Debug Driver" y "Update Target Before Debugging"

keil5

Ahora pulsa "Ok" y ya estás listo para compilar. Prueba a hacerlo sin modificar el programa. Si lo hace sin problemas, ya puedes empezar a modificar.

Para ver "Hola" cuando abras el debugger, descomenta la línea del printf y la de #include.

Aviso: si al compilar empieza a arrojar errores que tienen que ver con funciones que no se encuentran, referidas a una biblioteca por ejemplo la gpio, tienes que añadirlas tú mismo. Para ello haz doble click en alguna carpeta de la barra de archivos de la izquierda (intenta ser ordenado, por ejemplo gpio iría en la carpeta peripherals) y busca el archivo .c de ésa librería. Aunque el Path de los .h esté configurado internamente, hay que añadir los .c uno por uno.

Vamos a debuggear

Si ha compilado bien, carga el programa en la placa y dale al icono de debug. Aparecerás en otra ventana con más opciones, tienes que abrir el menú en éste simbolito:

keil6

Y hacer click en "Debug (printf) viewer". Una vez hecho ésto haz click en Run (el icono de la izquierda con el texto y la flechita hacia abajo) y...

keil7

¡Ya tenemos un Hola!

Espero que os haya funcionado y si tenéis alguna duda/problema, comentadlo e intentaré solucionarlo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *