respiration.ino

GD32F103 (GigaDevice) — puce + cartes compatibles Blue Pill · Fichier : respiration.ino · Langage : Arduino · Usage : Respiration LED avec le PWM du timer

Le core STM32F1 route analogWrite vers les timers matériels : PA1 est le canal 2 de TIM2, et la fréquence se règle par broche. La LED respire avec un PWM 20 kHz que même les condensateurs n'entendent pas.

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 LED + résistance 330 Ω sur PA1.

Branchement

LED anode sur PA1 via 330 Ω vers GND. PA1 doit rester libre au boot (pas de strap), ce qui en fait une bonne broche de sortie.

Fonctionnement

analogWrite configure le canal de TIM2 en mode PWM et écrit la comparaison ; la boucle ne fait que ramper la consigne. 108 MHz de base de temps = une résolution de phase confortable. 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

Trois canaux TIM2 (PA0/1/2) pour une LED RGB, ou sortie vers un MOSFET pour une lampe variable.

respiration.ino

// Respiration sur PA1 (TIM2CH2) — analogWrite du core STM32F1.
const int LED = PA1;
const int FREQ = 20000;        // 20 kHz : inaudible pour les composants

int niveau = 0;
int sens = 2;

void setup() {
  pinMode(LED, OUTPUT);
  analogWriteFrequency(LED, FREQ);   // core STM32F1 : frequence par broche
  Serial.begin(115200);
}

void loop() {
  niveau += sens;
  if (niveau >= 255 || niveau <= 0) sens = -sens;
  analogWrite(LED, niveau);
  delay(5);                          // rampe complete ~ 0,64 s
}

← Retour à la fiche