Desde el concurso de MakeWithAda, del cuál os hablé en la otra entrada, nos enviaron una placa de desarrollo (STM32F4DISCOVERY). Esta placa de desarrollo contiene un procesador ARM-M4 de 32 bits con módulo de coma flotante. En nuestro proyecto, la vamos a usar para leer los datos del módulo ECG y ejecutar la red neuronal, todo ello corriendo en un STM32 y programado en Ada.

Placa de desarrollo STM32F4DISC
Software necesario
Para poder empezar a jugar con la placa necesitamos instalar el software para poder compilar el código en Ada y flashear la placa de desarrollo. Para ello vamos a necesitar instalar y configurar varios programas:
- Python 2.7 (Es muy importante que sea la versión 2.7) Necesitamos que esté instalada y configurada en el PATH.
- STLINK-V2 (Descarga) Será el encargado de comunicar nuestro entorno de desarrollo con la placa.
- GPS y ARM-ELF (Descarga) Es importante descargar los dos enlaces. En función del sistema operativo en el que estéis, os aparecerá la versión correcta.
Enlaces de GPS y ARM-ELF
- Git (Descarga) El conocidísimo control de versiones, necesario para instalar las librerías de Ada que se encargan de hablar con el hardware.
Una vez tenemos todo instalado, tenemos que confirmar que tenemos el arm-elf y python accesible desde la consola. Para saber si los tenemos basta con ejecutar los siguientes comandos:
$ python --version Python 2.7.13 $ arm-eabi-ar --version GNU ar (GNU Binutils) 2.28.51.20170529 Copyright (C) 2017 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or (at your option) any later version. This program has absolutely no warranty.
Si en alguno de los comando aparece que no encuentra el programa especificado, habría que añadir la carpeta correspondiente al PATH de tu sistema operativo.
Con esto ya instalado, nos tocaría instalar las librerías para trabajar con el hardware físico. Estas librerías están disponibles en Github. Para instalarlas vamos a hacer uso de Git y con un par de comandos las tendremos listas.
$ cd directorio_donde_queremos_guardarlas $ git clone --recursive https://github.com/AdaCore/Ada_Drivers_Library.git $ cd Ada_Drivers_Library $ python ./scripts/install_dependencies.py
Hello Leds
Ahora vamos a compilar, flashear y ejecutar alguno de los ejemplos que vienen con la librería. Los ejemplos están dentro de la carpeta 'Ada_drivers_Library/examples/STM32F4_DISCO'
. En nuestro caso vamos a abrir el proyecto “blinky_f4disco.gpr” y hacemos click en Build->Bareboard->Flash to Board
. Si todo ha ido bien, nos compilará el proyecto y lo enviará a la placa. Al pulsar el botón reset (Cuando haya terminado de flashear) los LEDs deberían empezar a parpadear.
Para arreglarlo hay que ir a: Projecto -> Embedded -> Connection Tool -> st-util
Empezando un proyecto nuestro
Con la prueba anterior comprobamos que todo lo necesario para compilar y flashear el STM32 está instalado. Sin embargo, ahora nos interesa empezar nuestro proyecto. Para ello solo nos tenemos que copiar uno de los ejemplos a una carpeta nuestra, por ejemplo de Ada_Drivers_Library\examples\STM32F4_DISCO\accelerometer
a nuestra carpeta del proyecto Documentos/ProyectoAda
. Borramos todo el código (dejamos el main.adb) que hay dentro de la subcarpeta src
y luego tenemos que cambiar el nombre del proyecto. Esto se consigue cambiando el nombre del fichero .gpr
y editandolo. En nuestro ejemplo cambiaríamos de accelerometer.gpr
a miproyecto.gpr
y editaríamos el fichero para cambiar el nombre del proyecto (líneas remarcadas):
with "C:/GNAT/Ada_Drivers_Library/boards/stm32f407_discovery/stm32f407_discovery_full.gpr"; project miproyecto extends "C:/GNAT/Ada_Drivers_Library/examples/shared/common/common.gpr" is for Runtime ("Ada") use STM32F407_Discovery_Full'Runtime ("Ada"); for Target use "arm-eabi"; for Main use ("main.adb"); for Languages use ("Ada"); for Source_Dirs use ("src"); for Object_Dir use "obj"; for Create_Missing_Dirs use "True"; package Linker is for Default_Switches ("Ada") use ("-Wl,--print-memory-usage"); end Linker; package Compiler renames STM32F407_Discovery_Full.Compiler; end miproyecto;
Ahora ya solo nos queda escribir el código en el fichero src/main.adb
, compilarlo y flashearlo en el STM32 para ver que funciona. Como ejemplo os pongo un pequeño main que parpadea todos los LEDs de la placa cada 2 segundos.
with STM32.Board; use STM32.Board; with Ada.Real_Time; use Ada.Real_Time; procedure Main is Next_execution: Ada.Real_Time.Time; Period: constant Ada.Real_Time.Time_Span:= Ada.Real_Time.To_Time_Span(2.0); -- 2secs begin Initialize_LEDs; Next_execution:= Ada.Real_Time.Clock + Period; All_LEDs_Off; loop Toggle_LEDs(All_LEDs); delay until Next_execution; Next_execution:= clock + Period; end loop; end Main;
0 comentarios