🛠 GPIO, ADC 16 bits et DAC sur le Nucleo STM32H743ZI : bouton, LED et potentiomètre
Qué vas a construir
Un recorrido práctico por las E/S básicas del STM32H743ZI: la placa expone hasta 114 GPIO con capacidad de interrupción externa a través del conector ST Zio (compatible con Arduino Uno V3) y de los headers ST morpho, además de un potente hardware analógico: 3× ADC (16 bits, 36 canales, hasta 3,6 MSPS) y 2× DAC de 12 bits. Leeremos el botón USER, atenuaremos un LED y transmitiremos un valor de potenciómetro a través del DAC.
Mapa de la placa (mapeo Zephyr por defecto, útil incluso bajo Arduino)
- LD1 = PB0, LD2 = PE1, LD3 = PB14; botón USER = PC13
- Pin de ejemplo ADC: ADC1_INP15 en PA3; pin de ejemplo DAC: DAC1_OUT1 en PA4
- Arduino SPI1 en PD14/PA5/PA6/PB5; I2C en PB8/PB9
- La variante STM32duino expone 28 canales analógicos (A0–A27) en esta placa
Hardware
- 1 Nucleo-144 STM32H743ZI + cable de datos USB
- 1 potenciómetro (cursor a A0, extremos a 3V3 y GND)
- 1 cable puente desde PA4 (salida DAC) a una sonda de osciloscopio o un multímetro
Código (núcleo STM32duino, placa "Nucleo H743ZI")
const uint8_t BTN = LED_BUILTIN; // USER button is PC13 on the board; on the
// Arduino header use any free pin vs GND
const uint8_t LED = LED1; // LD1 = PB0 via the core alias
const uint8_t POT = A0; // one of 28 analog channels A0..A27
const uint8_t DAC1 = A4; // PA4 = DAC1_OUT1 (Zephyr mapping)
// >
// pin alias depends on your core version
void setup {
pinMode(LED, OUTPUT);
Serial.begin(115200); // ST-LINK virtual COM port
}
void loop {
int raw = analogRead(POT); // 3x 16-bit ADCs, up to 3.6 MSPS
// Map the ADC reading onto the 12-bit DAC output scale
analogWrite(DAC1, map(raw, 0, 4095, 0, 255));
digitalWrite(LED, (raw > 2048) ? HIGH : LOW);
Serial.printf("ADC=%d -> DAC level=%d\n", raw,
map(raw, 0, 4095, 0, 255));
delay(100);
}
Pasos
- Conecta el potenciómetro entre 3V3, GND y A0 (nunca alimentes un pin con más tensión que la propia del rail de la placa).
- Selecciona la placa Nucleo H743ZI en el núcleo STM32duino y sube el código.
- Gira el potenciómetro: el multímetro en PA4 debería seguirlo suavemente — eso es el DAC de 12 bits funcionando.
- Pulsa el botón USER (PC13) si lo has conectado a un pin del header: usa
pinMode(pin, INPUT_PULLUP)ydigitalReadde la misma manera.
Resultado esperado
Los conteos del ADC suben mientras giras el potenciómetro, la tensión del DAC lo sigue y LD1 cambia de estado a mitad de escala. Con tres ADC de 16 bits a hasta 3,6 MSPS, esta placa muestrea mucho más rápido que cualquier Arduino clásico — el cuello de botella es tu sketch, no el hardware.
Errores comunes
- ZI vs ZI2: las dos placas Nucleo cablean el header Arduino de forma diferente — elige la placa exacta que posees o cada número D/A se remapeará silenciosamente.
- Leer A0 mientras el mapeo Zephyr indica ADC1_INP15 en PA3: los números de Arduino y los nombres de señal ST son dos espacios de nombres diferentes; consulta el archivo de variante para el mapeo.
- Olvidar que el ADC de 16 bits puede estar configurado por defecto en una resolución inferior en algunos núcleos — consulta el ejemplo de ADC en
Examples/ADCde STM32CubeH7 para configuraciones de control total.
Otros tutoriales para esta placa
- Premiers pas sur le Nucleo-144 STM32H743ZI : core STM32duino, ST-LINK et premier Blink
- MicroPython sur le Nucleo STM32H743ZI : le REPL 480 MHz via le port série ST-LINK
- Zephyr RTOS sur le Nucleo STM32H743ZI : west build, flash et le piège des 96 MHz
- STM32Cube HAL à 480 MHz sur le STM32H743ZI : VOS0, latence flash et HSE bypass
- FreeRTOS sur le Nucleo STM32H743ZI : le projet officiel CubeH7, tâches et file d'attente
- Serveur web sur l'Ethernet du STM32H743ZI : démo LwIP officielle, RMII et errata