🛠 Firmware libre sur Blue Pill avec libopencm3 et OpenOCD
¿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
- Compilador:
arm-none-eabi-gcc; construcción en libopencm3-examples o mediante una plantilla tipo libopencm3-template. - Flasheo SWD: OpenOCD (método documentado por el proyecto) o las herramientas stlink:
st-flash --reset write blink.bin 0x8000000. - Alternativa sin ST-Link: el bootloader ROM serie (
stm32flash, BOOT0=1, USART1 PA9/PA10 a 115200).
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
- Découvrir la Blue Pill : que trouve-t-on dans la boîte ?
- Premier programme Arduino sur la Blue Pill (core officiel stm32duino)
- Alimenter et flasher la Blue Pill : BOOT0, port série, ST-Link et DFU
- Série, ADC et chasse aux contrefaçons : diagnostiquer sa Blue Pill
- Dompter l'USB natif de la Blue Pill : CDC, DFU et la résistance rebelle
- Passer au niveau supérieur : STM32CubeIDE, HAL et LL sur F103