Recientemente he estado jugando con el STM32, que es un pequeño microcontrolador realizado por ST. Estas parecen ser bastante grandes chips de microcontroladores, que son relativamente rápido (dependiendo de cuál es el modelo que obtienes), tienen una cantidad decente de flash (hasta 1 MB), y tienen una buena cantidad de memoria (hasta 192KB). También es fácil de obtener tarjetas de desarrollo para ellos, hay una línea de tableros llamados los tableros STM32DISCOVERY que son muy baratos y fáciles de conseguir. Es posible trabajar en estos chips en su totalidad con herramientas de código abierto, lo que es importante para mí.
Esta serie de publicaciones irá a través de todos los pasos necesarios para desarrollar en estos foros. Tenga en cuenta que todo esto está cubierto en otro lugar en la web, pero una gran cantidad de la información es anticuado o dispersa. Voy a construir todas las piezas desde cero para obtener un conjunto de herramientas de trabajo y los binarios que se puede utilizar para desarrollar sus propias aplicaciones STM32.
Para empezar, voy a describir mi configuración de hardware. Tengo un portátil con Fedora 19 x86_64. Esta es mi máquina de desarrollo principal, y esto va a ser el anfitrión de todo lo que hago con el STM32. Para una tabla de STM32, tengo una junta STM32F3DISCOVERY, como se muestra aquí. Sin embargo, tenga en cuenta que para la mayoría de los mensajes, el consejo exacto que usted tiene no es tan importante. Mientras que es una de las STM32F * tableros descubrimiento, los pasos siguientes se aplicarán en su mayoría. Las diferencias se vuelven más importantes cuando empezamos a escribir realmente el código que se ocupa de los GPIO (como los GPIOs difieren por tabla), pero para el entorno de desarrollo que son realmente todo muy similar.
Esta serie de mensajes va a hacer los pasos en el siguiente orden:
- Con el fin de hacer nada, necesitamos un compilador cruzado. Este es un conjunto de herramientas que se ejecuta en nuestro entorno de desarrollo (Fedora 19 x86_64), pero emiten instrucciones para nuestro hardware de destino (STM32 ARM). Además de la / compilador de C + C +, esto también incluye cosas como el ensamblador y enlazador. Parte de la cadena de herramientas compilación cruzada también incluye un entorno de libc, como mínimo a programar, lo cual le da acceso a
y otros archivos de cabecera y las funciones familiares. Vamos a construir una cruz compilar medio ambiente de binutils, gcc, y newlib. - Una vez que tenemos un compilador cruzado, necesitamos alguna manera de depurar los programas que escribimos. La cosa más simple de hacer aquí es construir gdb, el depurador de GNU. Desafortunadamente, no podemos simplemente utilizar el gdb sistema, ya que por lo general sólo se entiende cómo depurar y desmontar código en el desarrollo de la arquitectura de la máquina. Así que vamos a construir nuestra propia versión de gdb que entiende ARM.
- Con el depurador terminado, necesitamos alguna manera de tener la versión compilada de nuestro código y ponla en el dispositivo de destino. Los dispositivos STM32 utilizan algo llamado STLinkV2, que es un protocolo de comunicación de usos múltiples (generalmente a través de USB). Para subir nuestro código para el dispositivo, necesitamos una pieza de software el habla este protocolo. Por suerte hay OpenOCD, el cuchillo de los protocolos de comunicación del ejército suizo. Vamos a tener que construir una versión de este que se ejecuta en nuestro equipo de desarrollo, pero sabe hablar STLinkV2. En este paso también vamos a construir un archivo de configuración que pueden comunicarse a través de STLinkV2.
- Con las comunicaciones atendidas, necesitamos una biblioteca de dispositivos. Se trata básicamente de una capa de abstracción que nos permite hablar directamente con el hardware del dispositivo de destino. A los efectos de estos mensajes que vamos a utilizar libopencm3. Este paso se basará libopencm3 para el dispositivo de destino.
- Una vez que tenemos libopencm3 construidas, tenemos que saber cómo vincular los programas para que se ejecuten en el STM32. Este paso será discutir scripts de enlazador y directivas de línea de comandos necesarios para construir programas que se ejecutan en el STM32.
- Aquí construimos nuestro primer programa simple, subirlo a la STM32, y verlo correr! ¡Por fin!
- Para bonus, discutir la ejecución de un sencillo en tiempo real del sistema operativo en el STM32, FreeRTOS. El uso de este le permitirá definir varias tareas y tienen el interruptor RTOS entre ellos, al igual que las tareas en un sistema operativo en toda regla. Esto abre nuevas posibilidades y nuevos problemas, algunos de los cuales serán discutidos.