servo.ino
La bibliothèque Servo du core STM32F1 place chaque objet sur un timer matériel libre : le servo reçoit son 50 Hz exact sans que le code s'en occupe. Le vrai sujet reste l'alimentation séparée du servo.
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 servo SG90/MG90 + alimentation 5 V externe.
Branchement
Signal sur PC8, + sur l'alimentation externe, masses communes. Le GD32 est en 3,3 V : le servo tolère ce niveau de commande.
Fonctionnement
write(angle) convertit en impulsion 1-2 ms via le timer choisi par la bibliothèque ; le cœur ne génère plus rien ensuite. La période 20 ms est tenue par le matériel. 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
Deux servos sur deux timers pour un bras, ou commande par la console série du pont UART.
servo.ino
// Servo sur PC8 (timer attribue par la bibliotheque).
#include <Servo.h>
Servo servo;
int angle = 0;
int pas = 5;
void setup() {
Serial.begin(115200);
servo.attach(PC8); // n'importe quelle broche avec timer
Serial.println("Balayage 0-180");
}
void loop() {
angle += pas;
if (angle >= 180 || angle <= 0) pas = -pas;
servo.write(angle);
delay(30);
}