pub:armst

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:

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.

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

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
  • 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/

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 !!

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

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

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

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

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.

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:

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.

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

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.

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

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

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 Eclipse
  • stm32f4_discovery* (.h y .c) de Drivers/BSP/STM32F4-Discovery/
  • componentes del BSP, p.ej. acelerómetro, audio, etc. (.h y .c) específicos de Drivers/BSP/Components/ y comunes de Drivers/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/*
  • pub/armst.txt
  • Última modificación: 2020/09/28 11:44
  • (editor externo)