servo.ino
La librería Servo del core STM32F1 coloca cada objeto en un timer material libre: el servo recibe sus 50 Hz exactos sin que el código se ocupe. El tema real sigue siendo la alimentación separada del servo.
Hardware necesario
Una placa de desarrollo GD32F103C8T6 (Cortex-M3 a 108 MHz, compatible pin a pin con Blue Pill), alimentada a 3,3 V/5 V, con un adaptador ST-Link o serie. 1 servo SG90/MG90 + alimentación externa de 5 V.
Cableado
Señal en PC8, + a la alimentación externa, masas comunes. El GD32 es de 3,3 V: el servo tolera ese nivel de mando.
Funcionamiento
write(angle) convierte en impulso de 1-2 ms vía el timer que elige la librería; el núcleo ya no genera nada después. El periodo de 20 ms lo sostiene el hardware. Con Arduino: instale el core « STM32F1 » (Roger Clark, gestor de placas) y elija la placa « GD32F103C »; el LED de usuario es PC13 (activo en LOW). En C: biblioteca de firmware GD32F10x + ST-Link.
Para ir más lejos
Dos servos en dos timers para un brazo, o mando por la consola serie del puente 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);
}