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:
- Opción de menú Help → Install New Software…
- Ventana Install → botón Add…
- Caja Name:
GNU ARM Eclipse Plug-ins
- Caja Location:
http://gnuarmeclipse.sourceforge.net/updates
- Botón OK
- En la ventana de salida, seleccionar todos e instalar con botón Next
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:
- Menú Preferences → Run/Debug → String Substitutions
- Caja openocd_path, botón Edit…
- Caja Value: ruta al archivo binario openocd en al ruta guardada de la instalación, p.ej.
/opt/openocd/0.9.0/bin
- Caja openocd_executable: nombre del ejecutable, p.ej.
openocd
- Botón OK
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:
- Menú Preferences → Run/Debug → QEMU
- Caja openocd_path, botón Edit…
- Caja Executable: nombre del ejecutable, p.ej.
qemu
- Caja Folder: carpeta del ejecutable, p.ej.
/opt/Arm/qemu/bin
- Botón Apply → OK
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:
- En la configuración de la máquina virtual, apartado USB, agregar un filtro USB vacio sin más propiedades que las de defecto.
- Ejecutar la máquina virtual con permisos de administrador.
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:
- Base de datos de dispositivos STM32 y librerías
- Editor de código (Eclipse Luna)
- Generación de guión de enlazado (Linker script)
- Building tools (GCC-based cross compiler, assembler, linker)
- Debugging tools (OpenOCD, GDB)
- Flash programing tools
- Documentación
Descargas en:
- 32 bits: Linux 32 bits Windows 7 32 bits
- 64 bits: Linux 64 bits Windows 7 64 bits
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.
- Información y descarga en: http://www.st.com/stm32cube-pr2
- Tutorial de diseño con STM32CubeMX incluyendo FreeRTOS en: http://www.freertos.org/FreeRTOS-Plus/BSP_Solutions/st/STM32CubeMX.html
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.
- Información y descarga en: http://www.st.com/stm32cube-pr2
- Tutorial de diseño con STM32CubeMX incluyendo FreeRTOS en: http://www.freertos.org/FreeRTOS-Plus/BSP_Solutions/st/STM32CubeMX.html
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
1.12. Con Matlab/Simulink
http://www.st.com/en/development-tools/stm32-mat-target.html
https://es.mathworks.com/help/supportpkg/stmicroelectronicsstm32f4discovery/examples.html
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:
startup_stm32f4xx.S
, si existe en la carpeta de fuentes del proyecto, con.S
no .s para Eclipsestm32f4_discovery*
(.h y .c) deDrivers/BSP/STM32F4-Discovery/
- componentes del BSP, p.ej. acelerómetro, audio, etc. (.h y .c) específicos de
Drivers/BSP/Components/
y comunes deDrivers/BSP/Components/Common/
- componentes de Middleware, p.ej. USB, audio, etc. (.h y .c) específicos de ST de
Middlewares/ST/STM32_USB_Device_Library/*
Referencias
dokuwiki\Exception\FatalException: Allowed memory size of 134217728 bytes exhausted (tried to allocate 38015504 bytes)
An unforeseen error has occured. This is most likely a bug somewhere. It might be a problem in the authplain plugin.
More info has been written to the DokuWiki error log.