Qt Creator como IDE para desarrollo de proyectos con libopencm3 y PlatformIO.

17 de Octubre 2016

Tengo que aprender a usar microcontroladores que no sean PSoC xD, así que intentaré aprender a usar los micros de ST, tengo la clásica STM32F4Discovery que tiene un Cortex M4.
Por fortuna(?) esta soportada por el proyecto libopencm3, así que vamos a aprovechar eso (también tengo que aprender a usar las HAL que provee ST xD, pero eso ira en otro post).

PlatformIO es una herramienta que nos ayuda al desarrollo de proyectos y nos da soporte para el framework libopencm3 y como voy empezando usaré PlatformIO para ayudarme a ir aprendiendo a usar libopencm3, ya después se vera si puedo hacer proyectos solamente con libopencm3 (se puede usar como submodulo de git en proyectos que desarrollemos).

Los pasos para la instalación de PlatformIO estan aqui.

En mi caso para instalar PlatformIO:


$ sudo -H pip2 install -U platformio


Esto instala PlatformIO de forma global y como esta escrito en python2.7 tenemos que usar pip2.
Y para terminar instalé las reglas udev para las placas, el archivo esta aqui.
Las descargué en el escritorio e hice:

$ sudo mv 99-platformio-udev.rules /etc/udev/rules.d/99-platformio-udev.rules

Ahora para ver que placas de ST soporta PlatformIO podemos hacer:

$ platformio boards ststm32

Y obtenemos la lista completa de placas de ST que soporta PlatformIO (a mi solo me interesa una xD STM32F4DISCOVERY):

Platform: ststm32
------------------------------------------------------------------------------------------------------------------------
ID                    MCU            Frequency  Flash   RAM    Name
------------------------------------------------------------------------------------------------------------------------
armstrap_eagle1024    STM32F417VGT6  168Mhz    1024kB  192kB  Armstrap Eagle 1024
armstrap_eagle2048    STM32F427VIT6  168Mhz    2042kB  256kB  Armstrap Eagle 2048
armstrap_eagle512     STM32F407VET6  168Mhz    512kB   192kB  Armstrap Eagle 512
b96b_f446ve           STM32F446VET6  168Mhz    512kB   128kB  96Boards B96B-F446VE
bluepill_f103c8       STM32F103C8T6  72Mhz     64kB    20kB   BluePill F103C8
disco_f051r8          STM32F051R8T6  48Mhz     64kB    8kB    ST STM32F0DISCOVERY
disco_f100rb          STM32F100RBT6  24Mhz     128kB   8kB    ST STM32VLDISCOVERY
disco_f303vc          STM32F303VCT6  72Mhz     256kB   48kB   ST STM32F3DISCOVERY
disco_f334c8          STM32F334C8T6  72Mhz     64kB    12kB   ST 32F3348DISCOVERY
disco_f401vc          STM32F401VCT6  84Mhz     256kB   64kB   ST 32F401CDISCOVERY
disco_f407vg          STM32F407VGT6  168Mhz    1024kB  128kB  ST STM32F4DISCOVERY
...
...
...

Qt Creator como IDE.

No quería instalar Atom (por ejemplo) o usar VIM para hacer los proyectos, y como ya tengo Qt Creator instalado lo usaré como IDE, además PlatformIO se puede integrar en el para el desarrollo de proyectos en Qt Creator, más información aqui.

Primer proyecto

Siguiendo las instrucciones para usar Qt como IDE cree un directorio donde voy a tener mi proyecto, luego se tiene que inicializar un proyecto de PlatformIO en ese directorio, en mi caso usé:

$ platformio init --ide qtcreator --board disco_f407vg --project-option "framework=libopencm3"

Despues:
1. Abrimos Qt Creator y abrimos el proyecto (File > Open File or Project) seleccionando el archivo platformio.pro que se encuentra en el directorio del proyecto.
2. Seleccionamos el kit desktop y nos vamos a la configuración del proyecto (modo Projects, en el panel izquierdo).
3. Seleccionamos el directorio del proyecto en la opción General > Build directory.
4. Removemos todos los Build Steps, clic en Build Steps > Add Build Step > Custom Process Step y escribimos:
Command: platformio
Arguments: -f -c qtcreator run
Working directory: %{buildDir}
5. Removemos todos los items de Clean Steps, clic en Clean Steps > Add Clean Step > Custom Process Step y escribimos:
Command: platformio
Arguments: -f -c qtcreator run --target clean
Working directory: %{buildDir}

Al final de estos pasos me quedo configurado asi:
Configuración de Build Settings

6. Vamos al modo edicion (Edit mode en el panel izquierdo), incluimos el directorio src y los archivos que contiene (yo tuve que crear el archivo main.c dentro de src para poder incluir el directorio y sus contenidos).
7. Escribimos nuestra aplicación, como voy aprendiendo hice el clásico blink en  uno de los LEDs de usuario de la STM32F4Discovery:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdint.h>

#include <libopencm3/stm32/rcc.h>
#include <libopencm3/stm32/gpio.h>

void configGPIO(void);
void myDelay(volatile uint32_t delay);

int main(void){

    configGPIO();

    while(1){
        /* LED ON */
        gpio_set(GPIOD, GPIO12);
        myDelay(500000);
        /* LED OFF */
        gpio_clear(GPIOD, GPIO12);
        myDelay(500000);
    }

}

void configGPIO(void){
    rcc_periph_clock_enable(RCC_GPIOD);
    gpio_mode_setup(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO12);
}

void myDelay(volatile uint32_t delay){
    static uint32_t i;
    for(i = 0; i < delay; ++i);
}

8. Clic en Build > Build all y nos genera el .elf de la aplicación, el .elf se genera en un directorio oculto (en mi caso se generó en .pioenvs/disco_f407vg/firmware.elf ), estoy investigando como poder grabar la placa dando click en el botón Run de Qt Creator.

9. Ya tenemos el .elf de nuestra aplicación generado, solamente tenemos que grabarlo en la placa, conectamos la placa, abrimos una terminal y nos ubicamos en el directorio del proyecto, y hacemos:
$ platformio run -t upload
y si todo salio bien la placa se grabo de manera exitosa!!!

Iré dejando en el siguiente índice los proyectos que vaya haciendo:
  • Interrupción del botón de usuario
  • ADC
  • SPI
  • I2C
Saludos

Comentarios

Entradas más populares de este blog

PSoC Creator Tools

sprintf en PSoC Creator 3.0 y 3.1