sommeil.ino
En Stop, le GD32 tombe à ~100 µA tout en gardant la SRAM : le programme reprend où il s'est arrêté, contrairement au deep sleep. Le réveil se fait sur n'importe quelle interruption externe configurée.
Matériel requis
Une carte de développement GD32F103C8T6 (Cortex-M3 108 MHz, compatible broche à broche Blue Pill), alimentée en 3,3 V/5 V, avec un adaptateur ST-Link ou série. 1 bouton sur PA0 pour le réveil ; un micro-ampèremètre pour vérifier (pont PA0 via résistance sur RST pour les vieux cores).
Branchement
Bouton PA0-GND. Sur batterie, retirer le régulateur LDO de la carte ou alimenter le module nu : sinon c'est lui qui fixe le plancher de consommation.
Fonctionnement
LowPower.sleep entre en mode Stop (CLK off, SRAM retention) ; l'EXTI de PA0 réveille et le core rejoue la suite de loop(). Les variables gardent leur valeur. Avec Arduino : installez le core « STM32F1 » (Roger Clark, gestionnaire de cartes) et choisissez la carte « GD32F103C » ; le LED utilisateur est PC13 (actif à LOW). En C : bibliothèque GD32F10x + ST-Link.
Pour aller plus loin
Réveil périodique par la RTC interne (alarme) pour un capteur horodaté, en perdant juste le contexte série.
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 !");
}