sommeil.ino
En Stop, el GD32 baja a ~100 µA conservando la SRAM: el programa continúa donde se paró, al revés que el sueño profundo. El despertar ocurre en cualquier interrupción externa configurada.
Hardware necesario
Una placa de desarrollo GD32F103C8T6 (Cortex-M3 a 108 MHz, compatible pin a pin con Blue Pill), alimentada a 3,3 V/5 V, con un adaptador ST-Link o serie. 1 botón en PA0 para el despertar; un microamperímetro para verificar.
Cableado
Botón PA0-GND. A batería, quite el regulador LDO de la placa o alimente el módulo pelado: si no, es él quien fija el suelo de consumo.
Funcionamiento
LowPower.sleep entra en modo Stop (CLK off, retención SRAM); el EXTI de PA0 despierta y el core reanuda loop(). Las variables conservan su valor. Con Arduino: instale el core « STM32F1 » (Roger Clark, gestor de placas) y elija la placa « GD32F103C »; el LED de usuario es PC13 (activo en LOW). En C: biblioteca de firmware GD32F10x + ST-Link.
Para ir más lejos
Despertar periódico con la RTC interna (alarma) para un sensor con marca de tiempo, perdiendo solo el contexto serie.
sommeil.ino
// Sommeil : le GD32 consomme ~100 uA en Stop, reveil par bouton PA0.
// Le core STM32F1 expose LowPower (STM32LowPower) sur les cartes GD32.
#include <LowPower.h>
const int REVEIL = PA0; // bouton vers GND, wake sur LOW
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(REVEIL, INPUT_PULLUP);
Serial.begin(115200);
}
void loop() {
digitalWrite(LED_BUILTIN, LOW); // temoin (actif-bas)
delay(100);
digitalWrite(LED_BUILTIN, HIGH);
delay(900);
Serial.flush();
// Stop : CPU et peripheriques coupes, SRAM conservee, reveil EXTI
LowPower.sleep(); // reveille sur appui PA0
Serial.println("reveille !");
}