Teach Lecciones con laboratorios remotos

Lección Teach

STM32 Mbed CodeIDE (1/8): primer parpadeo

El alumnado usa STM32 Mbed CodeIDE para editar main.cpp, compilar y subir un programa DigitalOut de parpadeo, y registrar evidencia del LED en la placa real.

  • STM32 Nucleo (Mbed)
  • 50 min
  • Secundaria (16–19 años)
  • Español
  • Sistemas embebidos

¿Primera vez que activas Teach? Puedes realizar una sesión de clase sin costo. El alumnado entra con un código de clase.

Flujo desde el archivo main.cpp, pasando por una compilación Compile correcta y Upload to board, hasta la observación de la STM32 remota con la cámara.
STM32 Nucleo (Mbed)

Resultados de aprendizaje

  • Reconocer el flujo de trabajo de STM32 Mbed CodeIDE y el archivo de entrada main.cpp.

  • Escribir un programa Mbed mínimo con DigitalOut y ThisThread::sleep_for().

  • Recoger evidencias de que el código compiló, se cargó y cambió una salida real.

Vista previa de la actividad del estudiante

Contenido de la actividad

Solo vista previa. En una sesión de clase, los estudiantes pueden completar respuestas y entregar su trabajo al docente.

1

Antes de abrir el laboratorio

8 min

La programación embebida suele empezar con una prueba visible sencilla: ¿puede tu código hacer que un dispositivo físico cambie cuando se lo ordenas? Un primer parpadeo es pequeño, pero comprueba toda la cadena: editar, compilar, cargar y observar la placa real.

Mbed OS da a tu programa de C++ un conjunto de API preparadas para trabajar con microcontroladores: pines digitales, entradas analógicas, salidas PWM, temporización, hilos y mensajes serie. En este laboratorio, CodeIDE proporciona ese entorno Mbed para la placa STM32 remota. Tu programa vive en main.cpp, incluye mbed.h, empieza en int main() y controla hardware creando objetos de Mbed.

Por ejemplo, DigitalOut status_led(PB_5, 0); crea un objeto de salida llamado status_led conectado al pin STM32 PB_5. En lecciones posteriores usarás otros objetos de Mbed como DigitalIn, AnalogIn y PwmOut.

Puedes completar el curso con las explicaciones de esta actividad. Si quieres tener cerca la referencia oficial mientras trabajas, abre estas páginas:

- API de entrada/salida de Mbed OS
- Referencia de la API de Mbed CE

De main.cpp al hardware visible

Flujo desde el archivo main.cpp, pasando por una compilación Compile correcta y Upload to board, hasta la observación de la STM32 remota con la cámara.

Usa Abrir laboratorio, abre main.cpp en Files, sustituye y guarda el
código, pulsa Compile, después Upload to board y observa la cámara en
directo. En esta primera lección ignora interruptores, botones, potenciómetros,
entrada de consola y medidor de potencia. Guarda antes de compilar; los mensajes
de compilación no demuestran el parpadeo, así que confírmalo con la cámara.

La idea inicial es un parpadeo: encender una salida, esperar, apagarla, esperar y repetir.

En Mbed primero creas un objeto conectado a un pin:

DigitalOut status_led(PB_5, 0);

Lee esa línea así: "crea una salida digital llamada status_led en el pin PB_5 y empieza con valor 0".

La placa que vas a programar es la STM32 Nucleo WB55RG.

Placa STM32 Nucleo WB55RG

Foto de la placa STM32 Nucleo WB55RG usada en el laboratorio remoto de LabsLand.

Esta foto muestra la placa del microcontrolador. Sirve para orientarte, no para identificar el LED exacto a partir de una imagen fija. El laboratorio remoto en directo puede mostrar también controles o hardware de entrenamiento separados, que no aparecen en esta foto. No conectas nada a tu ordenador; CodeIDE envía el programa compilado a la placa remota.

Dentro de while (true), el programa se repite para siempre:

status_led = !status_led.read();
ThisThread::sleep_for(500ms);

Lee la primera línea así: "lee el valor actual, cámbialo al valor opuesto y guarda ese nuevo valor en la salida". El operador ! significa "no" u "opuesto" para un valor 0/1.

Un cambio de estado es una transición, por ejemplo de encendido a apagado o de apagado a encendido. Un ciclo completo de parpadeo encendido-apagado necesita dos cambios de estado: uno para encender y otro para volver a apagar.

Con una espera de 500ms después de cada conmutación, ¿qué descripción temporal es correcta?

2

Crear y probar el parpadeo

26 min

Planifica dos compilaciones y unos 18 minutos de laboratorio activo: primero 500ms y después 1000ms. Si hay cola, responde las dos preguntas de predicción y prepara los encabezados de las dos observaciones antes de tu turno.

Copia todas las líneas desde #include "mbed.h" hasta la última }. El código inicial contiene exactamente un marcador que impide compilar. Sustituye el TODO 1 antes de guardar o compilar; TODO_WAIT_VALUE no es C++ válido.

#include "mbed.h"

DigitalOut status_led(PB_5, 0);

int main() {
    // 1: sustituye el marcador por 500ms para la compilación 1.
    const auto wait_time = TODO_WAIT_VALUE;

    while (true) {
        status_led = !status_led.read();
        ThisThread::sleep_for(wait_time);
    }
}

Antes de cambiar el tiempo de espera, predice qué pasará. Usa tu respuesta sobre el tiempo entre cambios de estado para decidir si 1000ms debería hacer que el LED cambie más rápido, más lento o casi igual.

Antes de probar, ¿qué debería ocurrir al cambiar wait_time de 500ms a 1000ms?

Cómo encontrar el LED que cambia: después de cargar el programa, compara la vista de la cámara antes y después de que empiece a ejecutarse. Ignora los LED que permanecen siempre encendidos o apagados, y los destellos breves de carga/estado. Usa el LED que sigue cambiando con el tiempo programado; cuando pases de 500ms a 1000ms, el mismo LED debería seguir cambiando con el nuevo ritmo.

La tarjeta del laboratorio tiene un botón Marcar práctica como completada. No lo pulses todavía; úsalo solo después de completar todos los pasos numerados, incluida la nueva prueba con 1000ms.

  1. Abre el laboratorio STM32 Mbed CodeIDE desde el botón Abrir laboratorio de esta actividad.

  2. En CodeIDE, abre main.cpp.

  3. Reemplaza el archivo con el programa anterior y sustituye TODO_WAIT_VALUE por 500ms.

  4. Busca TODO en main.cpp. Cuando no haya coincidencias, guarda. Compila solo después de guardar.

  5. Compila la versión 1. Si aparece un error, revisa el TODO, la ortografía, las llaves {}, los paréntesis () y los puntos y coma.

  6. Antes de pulsar Upload, mira una vez la cámara en directo y elige la zona de la placa que vas a observar.

  7. Carga el programa en la placa. Espera a que la zona de consola/estado indique que la carga/programación terminó.

  8. Observa la misma zona de la cámara y busca el LED que cambia repetidamente con el tiempo programado. Ignora LED de alimentación/estado siempre encendidos y destellos breves de carga/estado. Usa un cronómetro o el temporizador de un móvil: empieza a cronometrar cuando el LED repetitivo cambie de estado, cuenta cinco cambios más y detente en el sexto cambio visible. Apagado-a-encendido y encendido-a-apagado cuentan cada uno como un cambio.

  9. Cambia wait_time de 500ms a 1000ms, guarda main.cpp, compila la versión 2, carga y observa de nuevo la misma zona del LED.

  10. Solo después de completar el paso 9, pulsa Marcar práctica como completada.

Registra las dos observaciones en las cajas siguientes. La razón para medir cinco intervalos es práctica: un solo cambio del LED es difícil de cronometrar con precisión desde una cámara en directo, pero cinco cambios dan una estimación más estable.

Usa este método para cada versión:

1. Empieza el cronómetro cuando el LED cambie de estado. Ese cambio inicial es el comienzo del intervalo 1.
2. Cuenta los siguientes cambios visibles en voz alta o en papel: 1, 2, 3, 4, 5.
3. Detén el cronómetro en el cambio que has contado como 5. La duración medida cubre cinco intervalos de cambio de estado.
4. Divide la duración medida entre 5 para estimar un intervalo de cambio de estado.
5. Un ciclo completo de parpadeo tarda dos cambios de estado, así que multiplica tu intervalo de cambio por 2.

Ejemplo: si cinco intervalos tardan unos 2,6 s, un intervalo de cambio de estado tarda unos 0,52 s y un ciclo completo de parpadeo tarda unos 1,04 s.

Para 500ms, escribe tu observación con este formato:

- He contado 5 intervalos de cambio de estado del LED repetitivo.
- Tiempo para 5 intervalos (s):
- Tiempo para 1 intervalo de cambio de estado, aproximadamente (s):
- Tiempo para 1 ciclo completo de parpadeo, aproximadamente (s):
- ¿Coincidió con mi predicción? sí/no, porque...

Para 1000ms, escribe tu observación con este formato:

- He contado 5 intervalos de cambio de estado del mismo LED repetitivo.
- Tiempo para 5 intervalos (s):
- Tiempo para 1 intervalo de cambio de estado, aproximadamente (s):
- Comparado con 500ms, el LED cambió más rápido/más lento/casi igual:
- ¿Coincidió con mi predicción? sí/no, porque...
- ¿Necesitaste solucionar algún problema? sí/no. Si sí, ¿qué cambió?

Escribe una nota de evidencia de placa real. Incluye cuatro detalles: si la compilación/carga terminó, dónde apareció el LED cambiante en la vista de la cámara, qué cambió en la cámara y en qué se veía diferente la versión de 1000 ms respecto a la de 500 ms. Ejemplo: "La compilación terminó, la carga/programación terminó y el LED cerca del lado izquierdo de la zona de la placa cambió de estado más lentamente cuando cambié 500ms por 1000ms."

3

Entender la estructura de Mbed

8 min

La mayoría de los programas de este curso siguen la misma estructura Mbed OS: incluir mbed.h, crear objetos de hardware como DigitalOut, empezar en int main() y poner el comportamiento repetido del controlador dentro de while (true).

Con tus propias palabras, ¿qué hace while (true) en este programa de parpadeo? ¿Por qué es necesario?

4

Enviar tu código

8 min

Antes de enviar, deja guardada en main.cpp la versión final con 1000ms. Busca otra vez TODO; el archivo entregado no debe contener marcadores TODO.

Adjunta tu main.cpp final guardado

Pulsa Comprobar archivos guardados, confirma que main.cpp contiene el programa final de parpadeo con 1000ms y luego pulsa Adjuntar código guardado. Después de adjuntar el código, pulsa Enviar entrega al final de la actividad. El adjunto requerido para esta lección es la captura de código guardado de main.cpp.

Convierte esta vista previa en una sesión de clase real

Activa LabsLand Teach para usar esta lección con tus estudiantes. La primera vez que actives Teach, podrás realizar una sesión de clase sin costo.