🛠 Firmware libre sur Blue Pill avec libopencm3 et OpenOCD

STM32F103 "Blue Pill" (STM32F103C8T6) · avance · Compiler le miniblink adapté à la LED PC13 avec la bibliothèque open-source écrite d'après les datasheets, et flasher via OpenOCD/stlink.

¿Por qué libopencm3?

libopencm3 es una biblioteca GCC de código abierto para Cortex-M «escrita completamente desde cero a partir de las hojas de datos del fabricante» — sin código de ST, bajo licencia LGPL3. La familia STM32 F1xx es compatible, y el proyecto documenta el flasheo mediante OpenOCD. Es la opción ideal para entender qué hace realmente el HAL, con una API ligera (rcc, gpio, usart, spi, i2c, adc, can…) y ejemplos canónicos: el repositorio libopencm3-examples contiene objetivos stm32-maple (miniblink, USB CDC-ACM, demos SPI/I2C) que corresponden a las tarjetas tipo Blue Pill.

El miniblink, versión PC13

Adaptado del ejemplo stm32-maple/miniblink, teniendo en cuenta que el LED está en modo sink (HIGH = apagado) y la baja capacidad de conducción de PC13:

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

static void gpio_setup(void)
{
    /* Active l'horloge du périphérique GPIOC (RCC_APB2ENR |= IOPCEN). */
    rcc_periph_clock_enable(RCC_GPIOC);

    /* PC13 en sortie push-pull 2 MHz (broche à faible drive). */
    gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_2_MHZ,
                  GPIO_CNF_OUTPUT_PUSHPULL, GPIO13);
}

int main(void)
{
    int i;
    gpio_setup;
    while (1) {
        gpio_set(GPIOC, GPIO13);      /* HIGH -> LED ÉTEINTE (sink) */
        for (i = 0; i < 800000; i++)
            __asm__("nop");
        gpio_clear(GPIOC, GPIO13);    /* LOW -> LED ALLUMÉE */
        for (i = 0; i < 800000; i++)
            __asm__("nop");
    }
}

Dos lecciones de hardware encapsuladas en este archivo: es necesario activar el reloj APB2 del puerto GPIOC antes de cualquier acceso (de lo contrario, las escrituras no tienen efecto), y PC13 debe permanecer como un pin de control lento — de ahí el modo de 2 MHz.

Cadena de compilación y flasheo

La definición de tarjeta PlatformIO para genericSTM32F103C8 enumera además los frameworks arduino, cmsis, libopencm3, stm32cube y los protocolos de subida jlink, cmsis-dap, stlink, blackmagic, serial, dfu — la prueba de que esta tarjeta se presta a todos los niveles de abstracción.

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales