🛠 Graduer une LED avec le PWM d'un timer

GD32F103 (GigaDevice) — puce + cartes compatibles Blue Pill · intermediaire · Schéma : IMG-gd32f103-intermediaire-1-pwm-led.svg — LED externe avec résistance 330 ohms sur PA6 pilotée en PWM par un timer du GD32F103C8, signal dent de scie annoté

Objectifs

Utiliser la sortie PWM (MDP en français) d'un des timers 16 bits du GD32F103 pour faire varier progressivement la luminosité d'une LED. Le GD32F103C8 dispose jusqu'à 10 timers généraux 16 bits, 2 timers avancés et 2 timers basiques ; le core Arduino communautaire mappe analogWrite sur les canaux des timers. Vous comprendrez le principe du rapport cyclique et la contrainte d'horloge APB1 (54 MHz max) / APB2 (108 MHz max).

Matériel

Code complet

// pwm_led.ino — GD32F103C8, core CommunityGD32Cores
const uint8_t PWM_PIN = PA6;   // sortie timer (cf. tableau AF du core) > 

void setup {
  pinMode(PWM_PIN, OUTPUT);
  Serial.begin(115200);
}

void loop {
  for (int p = 0; p <= 255; p += 4) {   // rampe montante
    analogWrite(PWM_PIN, p);
    Serial.println(p);
    delay(15);
  }
  for (int p = 255; p >= 0; p -= 4) {   // rampe descendante
    analogWrite(PWM_PIN, p);
    delay(15);
  }
}

Vérification attendue

La LED externe monte puis descend en luminosité de façon continue (respiration), sans paliers brutaux. Au contrôleur logique ou à l'oscilloscope, on voit un créneau de fréquence constante dont le rapport cyclique suit la rampe 0-255. La LED embarquée PC13, elle, ne clignote pas : elle n'est pas sur ce canal.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels