Tabla de Contenidos

Programación ARM Cortex-M

Desarrollo software en microcontroladores ARM Cortex-M sobre las plataformas de ST:

Se describen aquí los siguientes procesos:

y ejemplos:

1. Instalación de herramientas

El proceso de instalación descrito parte de un sistema operativo Linux basado en Debian.

Si bien no se descarta la posibilidad de instalación y ejecución correcta de las herramientas en sistemas operatiovs Windows, no se relata aquí y se recomienda la forma descrita sobre un sistema dedicado o máquina virtual tipo VirtualBox como la proporcionada aquí que incluye todas las herramientas preinstaladas.

1.1. IDE

El entorno de desarrollo a utilizar es Eclipse IDE con herramientas de desarrollo para C/C++ denominado Eclipse CDT:
http://www.eclipse.org/cdt/
Descargar de la ubicación anterior e instalar en una carpeta independiente, p.ej. /opt/Arm/eclipse Como requisito para ejecutar correctamente Eclipse, y la herramienta STM32CubeMX que utilizaremos después, es necesario tener instalado Oracle Java Runtime Environment (JRE) 7 or 8 en la versión de 32bit o 64bit que corresponda, puede utilizarse alternativamente en Linux OpenJDK en la correspondiente versión compatible:
http://www.java.com

1.2. ARM plugin

Para programar en C/C++ con Eclipse IDE en microprocesadores ARM Cortex-M necesitamos instalar un plugin específico de Eclipse, siguiendo los siguiente pasos:

Más info y tutorial en http://gnuarmeclipse.github.io/plugins/install/

1.3. ARM toolchain

Se recomienda utilizar el conjunto de herramientas de desarrollo GNU Tools for ARM Embedded Processors en su última versión desde:
http://launchpad.net/gcc-arm-embedded
Nota importante: recordar la ruta de instalación asignada para indicar en el asistente de Eclipse, p.ej. /opt/Arm/gcc !!

1.4. Depurador

Utilizaremos como herramienta de depuración OpenOCD en su última versión desde:
http://openocd.sourceforge.net/
Nota importante: recordar la ruta de instalación asignada, p.ej. /opt/Arm/openocd !!
A continuación establecer permisos para conexión de la tajeta por el puerto USB mediante archivo de reglas en /etc/udev/rules.d , p.ej.:

sudo cp /opt/Arm/openocd/0.9.0/contrib/99-openocd.rules \
 /etc/udev/rules.d/
sudo udevadm control --reload-rules

Configurar Eclipse para operar con OpenOCD:

1.5. Emulador

Es posible realizar la emulación del procesador ARM Cortex M3 con la herramienta QEMU, instalando ésta desde:
https://sourceforge.net/projects/gnuarmeclipse/files/QEMU/GNU%20Linux/
Nota importante: recordar la ruta de instalación asignada, p.ej. /opt/Arm/qemu !!
Configurar Eclipse para operar con QEMU:

1.6. Generador de código STM32CubeMX

Instalación de herramienta STM32Cube desde:
http://www.st.com/stm32cubeSTM32CubeMX v.4.8.0
También como plugin de Eclipse:
STSW-STM32095

1.7. Programador ST-LINKv2

La programación directa en flash de archivos binarios puede realizarse con la utilidad de ST para programación y depuración en circuito ST-LINK/V2, que en Linux tiene su correspondiente utilidad compatible descargable desde:
https://github.com/texane/stlink
Como requisito es necesario instalar librerías con dependencia de USB 1.0, para compilar el código fuente y posteriormente reglas para el acceso a la tarjeta, todo junto sería:

sudo apt-get install libusb-1.0-0-dev git pkg-config
git clone https://github.com/texane/stlink stlink.git
cd stlink.git
./autogen.sh
./configure
make
sudo make install
sudo cp *.rules /etc/udev/rules.d
sudo restart udev

1.8. Uso de herramientas en máquina virtual con VirtualBox

Se han detectado problemas en el uso de la herramientas que requieren el uso de dispositivos conectados a puertos USB, para tareas de depuración y grabación esenciales, que impiden la captura de dichos dispositivo en el sistema huesped Linux bajo sistema principal Windows 7.

Para solucionar este problema se recomienda:

1.9. System Workbench for STM32

Este entorno integrado libre de desarrollo incluye las herramientas anteriormente descritas en una sola instalación con unos scripts de asistencia en el desarrollo. Las herramientas incluidas son:

Descargas en:

1.10. STM32CubeMX

Se trata de una herramienta gráfica de configuración, que genera el código en lenguaje C de inicialización necesario, para un sistema basado en plataformas hardware de STM32, mediante asistentes gráficos.
El código generado se utilizará a modo de plantilla dentro de Eclipse para construir la aplicación final, a partir de las librerías comunes configuradas en ambos entornos.

1.11. ARM/uClinux

Un conjunto de herramientas para compilar código ARM bajo uClinux si pretendemos incluir este sistema operativo en una plataforma STM32 como la STM32F429I-Disco.

Toolchain

Se ha probado con éxito la versión siguiente de Mentor Graphics (evitar SourceryG++ arm-2011.03):
arm-2010q1-189-arm-uclinuxeabi-i686-pc-linux-gnu.tar.bz2
Instalación:

tar jxvf arm-2010q1-189-arm-uclinuxeabi-i686-pc-linux-gnu.tar.bz2
export PATH=`pwd`/arm-2010q1/bin:$PATH

U-Boot, uClinux, BusyBox

git clone https://github.com/robutest/u-boot.git
git clone https://github.com/robutest/uclinux.git
wget http://busybox.net/downloads/busybox-1.22.1.tar.bz2

1.10. STM32CubeMX

Se trata de una herramienta gráfica de configuración, que genera el código en lenguaje C de inicialización necesario, para un sistema basado en plataformas hardware de STM32, mediante asistentes gráficos.
El código generado se utilizará a modo de plantilla dentro de Eclipse para construir la aplicación final, a partir de las librerías comunes configuradas en ambos entornos.

1.11. ARM/uClinux

Un conjunto de herramientas para compilar código ARM bajo uClinux si pretendemos incluir este sistema operativo en una plataforma STM32 como la STM32F429I-Disco.

Toolchain

Se ha probado con éxito la versión siguiente de Mentor Graphics (evitar SourceryG arm-2011.03):
arm-2010q1-189-arm-uclinuxeabi-i686-pc-linux-gnu.tar.bz2
Instalación:

tar jxvf arm-2010q1-189-arm-uclinuxeabi-i686-pc-linux-gnu.tar.bz2
export PATH=`pwd`/arm-2010q1/bin:$PATH

U-Boot, uClinux, BusyBox

git clone https://github.com/robutest/u-boot.git
git clone https://github.com/robutest/uclinux.git
wget http://busybox.net/downloads/busybox-1.22.1.tar.bz2

stm32f429-linux-builder

git clone https://github.com/jserv/stm32f429-linux-builder
make
make install

http://www.st.com/en/development-tools/stm32-mat-target.html

http://es.mathworks.com/matlabcentral/fileexchange/43093-embedded-coder-support-package-for-stmicroelectronics-discovery-boards

https://es.mathworks.com/help/supportpkg/stmicroelectronicsstm32f4discovery/examples.html

https://es.mathworks.com/help/supportpkg/stmicroelectronicsstm32f4discovery/examples/getting-started-with-embedded-coder-support-package-for-stmicroelectronics-stm32-discovery-boards.html

https://es.mathworks.com/help/supportpkg/stmicroelectronicsstm32f4discovery/examples/parametric-audio-equalizer-for-stm32-discovery-boards.html

https://www.youtube.com/watch?v=qNWsp3TyI1Y

2. Manejo de herramientas

Tutorial de uso en dglab 1.0 de CubeMX SW4STM32 (EclipseCDT Ac6)

3. Ejemplos de programación

3.0. Componentes y capas de firmware

De acuerdo a esta figura, habría que añadir a un nuevo proyecto C los archivos fuente generados por la herramienta CubeMX, más los necesarios dependientes de la plataforma/tarjeta:

Referencias

http://stm32f4-discovery.com/
http://armcortexm.blogs.upv.es/