ST-Link STM8/STM32 v2

ST-Link STM8/STM32 v2 (Disponible en Aliexpress) que es un programador y depurador (debugger) para microcontroladores de la familia STMicroelectronics.  Es el puente entre el puerto USB delPC y los pines de programación del chip.

No se fie de la imagen y siga el cableado de su modelo en concreto


CONEXIÓN

Conexiones principales (SWD)

Para la mayoría de los chips STM32 (los más comunes), el ST-Link utiliza un protocolo llamado SWD (Serial Wire Debug) que solo necesita 4 cables:

Pin en ST-LinkPin en el Chip / PlacaFunción
SWDIOSWDIO (o PA13)Datos
SWCLKSWCLK (o PA14)Reloj
GNDGNDTierra
3.3V3.3V (VCC)Alimentación
Conexiones de la sonda RS41 V_boost=Vcc_bust; MCU_RST=RESET; VBAT=Vcc
Usados: GND (Común o tierra); UART_TX (TX para la sonda RX para el ordenador), UART_RX (RX para la sonda, TX para el ordenador)



ATENCION Si el dispositivo a reprogramar (p.e. RS41) ya tiene alimentación (p.e. baterias) no conecte la alimentación de 3,3V 
(+3V_MCU =  PB1)


STM32CUBEPROGRAMER

Hay que descargar STM32CubeProgramer (unos 250 MB)  desde https://www.st.com/content/st_com/en.html y necesitará previamente darse de alta

Conecramos la sonda RS41 al ST-Link v2 (GND, SWDIO y SWCLK) y este al puerto USB de neustro ordenador (En nuestro caso es un macBook)

Pantalla de STM32CubeProgramer

Log con error en la lectura de datos

En el log podemos ver que:
  • el ST-Link funciona perfectamente y ha reconocido el chip
  • El código Device ID: 0x464 confirma que tienes un STM32L151 o similar (el cerebro de la RS41)
  • El "error Data read failed" indica que la Protección de Lectura (RDP) está activa. Vaisala protege sus sondas para que no podamos copiar su código original.

DESBLOQUEAR Y BORRAR FIRMWARE ORIGINAL DE VAISALA

Hay que limpiar el firmware, para ello 
  • En la columna de la izquierda de STM32CubeProgrammer, haz clic en el icono del escudo con una marca de verificación (OB - Option Bytes).

  • Despliega la sección que dice Read Out Protection.

  • El campo RDP está en Level 1 (o BB).
  • Cámbiad a Level 0 (AA).
  • Haz clic en el botón Apply.


Cambio a AA (LEvel 0, no protection) y APPLY


Borrado realizado

Protección eliminada


Al final hubo que hacerlo con comandos openocd, una vez roto ya se puede usar STM32Cube programmer

INSTALAR NUEVO FIRMWARE

Tomaremos como ejemplo rs41rg (ATENCION HASTA AQUÍ TODO ES VÁLIDO PERO ESTE FIRMWARE NO FUNCIONA CON LAS SONDAS RS41 DE VAISALA)

Modificar / Configurar

Descargar el proyecto desde https://github.com/mikaelnousiainen/RS41ng como zip y descomprimirlo

Modificar el fichero src/config.h
  • Haga una copia de segudidad, poniendole extensión .bak 
  • Configure su indicativo de radioaficionado, la programación de transmisión (sincronización horaria), las frecuencias de transmisión y los parámetros del modo de transmisión en config.h.
    • Seleccione el tipo de radiosonda deseado al principio del archivo eliminando el comentario // de las líneas #define RS41 o #define DFM17.
    • Personalice el indicativo de llamada MYCALL => su indicativo
    • Para RS41, los ajustes que empiezan por RADIO_SI4032_ para seleccionar la potencia y los modos de transmisión.
Vamos a usar APRS por lo que cambiamos la potencia de 5 => 7

Vamos a e jecutar 1 vez CW (true) en  RADIO_SI4032_TX_F REQUENCY_CW        432300000y 2 veces APRS (true) RADIO_SI4032_TX_FREQUENCY_APRS_1200 432500000

    • Para APRS al menos APRS_SSID, APRS_SYMBOL y APRS_COMMENT si transmite APRS.
      • #define APRS_CALLSIGN CALLSIGN
      • #define APRS_SSID 'D'
      • #define APRS_SYMBOL_TABLE '/'
      • #define APRS_COMMENT "RS41ng radiosonde firmware test"
      • #define APRS_WEATHER_REPORT_ENABLE true
    • PAra CW
      • #define CW_SPEED_WPM 20  // CW speed in WPM, range 5 - 40
      • #define CW_TIME_SYNC_SECONDS 0
      • #define CW_TIME_SYNC_OFFSET_SECONDS 0
    • Configure las plantillas de mensajes transmitidos en config.c, según los modos que utilice. Puede personalizar los mensajes APRS, CATS y CW con más detalle aquí.
      • Para CW solo indicativo
        • char *cw_message_templates[] = { "$cs", NULL};
      • Para APRS

Compilar

Cómo usamos macOS debemos ejecutar desde el terminal
  • brew install --cask gcc-arm-embedded
  • brew install make
  • cd /Users/Juan/Downloads/RS41ng-main
  • mkdir build 
  • cd build
  • Mirar donde esta el fichero y que nombre tiene
    • which arm-none-eabi-gcc => en nuestro caso => /usr/local/bin/arm-none-eabi-gcc
  • Ejecutar
cmake .. -DCMAKE_SYSTEM_NAME=Generic \
-DCMAKE_C_COMPILER=/usr/local/bin/arm-none-eabi-gcc \
-DCMAKE_CXX_COMPILER=/usr/local/bin/arm-none-eabi-g++ \
-DCMAKE_TRY_COMPILE_TARGET_TYPE="STATIC_LIBRARY" \
-DCMAKE_C_COMPILER_WORKS=1 \
-DCMAKE_CXX_COMPILER_WORKS=1 \
-G "Unix Makefiles"

Si vas a hacer cambios a menudo, el orden ideal para no tener problemas con las rutas de tu Mac es:

  1. Entrar en build: cd build

  2. Parchear rutas (por si acaso): find . -type f \( -name "*.make" -o -name "*.txt" \) -exec sed -i '' 's|/usr/bin/arm-none-eabi-|/usr/local/bin/arm-none-eabi-|g' {} +

  3. Compilar: make

  4. Generar BIN: /usr/local/bin/arm-none-eabi-objcopy -O binary src/RS41ng.elf RS41ng_EA5JTT.bin


Cargar el firmware

Parametros de conexión por defecto del ST32cube programmer al ST-LINK 

Cuando nos conectamos de forma correcta con el RS41 nos da indormación del procesador.
Las radiosondas mas recientes usan STM32L412  y el chip de radio Si4063 (o similar de la serie Si446x).
Las sondas RS41 de Vaisala mas antiguas usan STM32F100 y el chip de radio Si4032.


Previamente a cargar el .bin con ST32cube Programmer hay que desbloquer  la protección de memoria 

Pruebe primeramente con STMcubeprog 

  • Para RSM414RSM424RSM425)
    • En OB (Options byte)  Read Out Protection
      • cambiar RDP byte de BB a AA
    • En OB (Options byte) Write Protection modifique los siguientes valores
      • WRP1A_STRT - value 0x1address 0x08000800
      • WRP1A_END - value 0x0address 0x08000000
      • WRP1B_STRT - value 0x1address 0x08000800
      • WRP1B_END - value 0x0address 0x08000000
  • Pruebe con el boton de la esquina inferior izquierda (Erase Full chip flash memory)

Si el borrado falla pruebe con openoocd que apra macOS es
  • brew install openocd
  • Reseteo proteccion hardware
    • openocd -f interface/stlink.cfg -c "transport select hla_swd" -c "set CPUTAPID 0x2ba01477" -f target/stm32l4x.cfg -c "init; halt; stm32l4x unlock 0; shutdown"
  • Borra graba y verifica
    • openocd -f interface/stlink.cfg -c "transport select hla_swd" -c "set CPUTAPID 0x2ba01477" -f target/stm32l4x.cfg -c "init; halt; program RS41ng_EA5JTT.bin 0x08000000 verify reset exit"
  • Borrado completo antes de reintalar firmware
    • openocd -f interface/stlink.cfg -c "transport select hla_swd" -c "set CPUTAPID 0x2ba01477" -f target/stm32l4x.cfg -c "init; halt; stm32l4x mass_erase 0; exit"
Log de STM32CubeProgrammer
21:03:29 : UR connection mode is defined with the HWrst reset mode
21:03:29 : ST-LINK SN  : 303030303030303030303031
21:03:29 : ST-LINK FW  : V2J37S7
21:03:29 : Board       : --
21:03:29 : Voltage     : 2.87V
21:03:29 : SWD freq    : 4000 KHz
21:03:29 : Connect mode: Under Reset
21:03:29 : Reset mode  : Hardware reset
21:03:29 : Device ID   : 0x464
21:03:29 : Revision ID : Rev A
21:03:29 : Debug in Low Power mode enabled.
21:03:29 : UPLOADING OPTION BYTES DATA ...
21:03:29 :   Bank          : 0x00
21:03:29 :   Address       : 0x40022020 
21:03:29 :   Size          : 20 Bytes
21:03:29 : UPLOADING ...
21:03:29 :   Size          : 1024 Bytes
21:03:29 :   Address       : 0x8000000
21:03:29 : Read progress:
21:03:29 : Data read successfully
21:03:29 : Time elapsed during the read operation is: 00:00:00.019
21:03:38 : Opening and parsing file: RS41ng_EA5JTT.bin
21:03:38 : Memory Programming ...
21:03:38 :   File          : RS41ng_EA5JTT.bin
21:03:38 :   Size          : 49.43 KB 
21:03:38 :   Address       : 0x08000000
21:03:38 : Erasing memory corresponding to segment 0:
21:03:38 : Erasing internal memory sectors [0 24]
21:03:38 : Download in Progress:
21:03:40 : File download complete
21:03:40 : Time elapsed during download operation: 00:00:01.849
21:03:40 : Verifying...
21:03:40 : Read progress:
21:03:40 : Time elapsed during verifying operation: 00:00:00.309
21:03:40 : Download verified successfully
21:03:54 : Opening and parsing file: RS41ng_EA5JTT.bin
21:03:54 : Memory Programming ...
21:03:54 :   File          : RS41ng_EA5JTT.bin
21:03:54 :   Size          : 49.43 KB 
21:03:54 :   Address       : 0x08000000
21:03:55 : Erasing memory corresponding to segment 0:
21:03:55 : Erasing internal memory sectors [0 24]
21:03:55 : Download in Progress:
21:03:56 : File download complete
21:03:56 : Time elapsed during download operation: 00:00:01.849
21:03:56 : Verifying...
21:03:56 : Read progress:
21:03:57 : Time elapsed during verifying operation: 00:00:00.307
21:03:57 : Download verified successfully
21:03:57 : RUNNING Program ... 
21:03:57 :   Address:      : 0x08000000
21:03:57 : Application is running, Please Hold on...
21:03:57 : Start operation achieved successfully


COMPROBAR

#define RADIO_SI4032_TX_FREQUENCY_CW        432300000
#define RADIO_SI4032_TX_FREQUENCY_APRS_1200 432500000

con SDR comprobar las frecuencias de emisión de CW (432,3) y APRS (432,5), que vimos que no funciona



Advertencia importante

Las modificaciones, configuraciones y procedimientos descritos en este sitio pueden implicar riesgos técnicos, legales o de seguridad. El autor no se responsabiliza del mal funcionamiento de los equipos, daños permanentes, pérdida de garantía ni de posibles infracciones legales derivadas del uso de esta información.
El lector asume plena responsabilidad por cualquier acción que decida realizar basándose en el contenido de este blog.

© 2026 EA5JTT. Queda prohibida la reproducción total o parcial sin autorización expresa del autor.

No hay comentarios:

Publicar un comentario

Instalando ADS-B en una Raspberry Pi

En una Raspberry Pi se puede instalar sofware como ADS-B (como dump1090-fa  manenido por  https://www.flightaware.com/  que facilita una dis...