sommeil.ino

GD32F103 (GigaDevice) — puce + cartes compatibles Blue Pill · Fichier : sommeil.ino · Langage : Arduino · Usage : Endormir le GD32 et le réveiller par RTC

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 !");
}

← Retour à la fiche