blinky.c
El hello world de Zephyr adaptado a placas nRF: el LED de usuario (alias devicetree led0, P0.13 en el DK) parpadea a 2 Hz. El código nunca nombra un pin crudo: el BSP de la placa hace el enlace, y así es portable.
Hardware
Una placa nRF52833-DK (Nordic, SoC nRF52833 Cortex-M4F, BLE 5) alimentada por USB: 4 LED en P0.13-P0.16 (activos a nivel bajo) y 4 botones en P0.11, P0.12, P0.24, P0.25 (activos a bajo, pull-up interno a activar). Solo la placa, alimentada por su puerto USB; ningún componente externo para esta primera prueba.
Cableado
Sin cableado: el LED va embarcado. En el DK los LED son activos a nivel bajo (el BSP lo sabe por el flag active-low).
Funcionamiento
GPIO_DT_SPEC_GET resuelve el alias led0 en (chip, pin, flags) en compilación; gpio_pin_configure_dt deja el pin en salida apagada y toggle + k_msleep(500) dan los 2 Hz.
Ejecución
Proyecto Zephyr: west build -b nrf52833dk/nrf52833 y luego west flash (J-Link embarcado); consola serie 115200 en el conector USB UART.
Variantes
Bajar a 0,5 Hz para un modo visible de reposo, usar PWM para una pulsación, o pasar a led1/led2 para un patrón multi-LED.
blinky.c
/* Blinky Zephyr — la LED0 de la carte clignote à 2 Hz.
* L'alias devicetree led0 pointe sur la LED utilisateur du BSP
* (P0.13 sur le nRF52833-DK, LED rouge sur le nRF52840-MDK).
* Build : west build -b <board> ; flash : west flash. */
#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>
static const struct gpio_dt_spec led =
GPIO_DT_SPEC_GET(DT_ALIAS(led0), gpios);
int main(void)
{
if (!gpio_is_ready_dt(&led)) {
printk("Puce GPIO absente\n");
return 1;
}
/* INACTIVE : la LED s'éteint quel que soit le sens d'actif */
gpio_pin_configure_dt(&led, GPIO_OUTPUT_INACTIVE);
while (1) {
gpio_pin_toggle_dt(&led);
k_msleep(500);
}
return 0;
}