blinky.c
Le hello world Zephyr adapté aux cartes nRF : la LED utilisateur (alias devicetree led0, P0.13 sur le DK) clignote à 2 Hz. Le code ne cite jamais de broche brute — le BSP de la carte fait le lien, ce qui le rend portable.
Matériel requis
Une carte nRF52833-DK (Nordic, SoC nRF52833 Cortex-M4F, BLE 5) alimentée par USB : 4 LEDs sur P0.13-P0.16 (actives au niveau bas) et 4 boutons sur P0.11, P0.12, P0.24, P0.25 (actifs bas, pull-up interne à activer). La carte seule, alimentée par son port USB ; aucun composant externe pour ce premier test.
Câblage
Aucun câblage : la LED est embarquée. Sur le DK les LEDs sont actives au niveau bas (le BSP le sait via le flag active-low).
Fonctionnement
GPIO_DT_SPEC_GET résout l’alias led0 en (puce, broche, flags) à la compilation ; gpio_pin_configure_dt met la broche en sortie éteinte, puis toggle + k_msleep(500) font le 2 Hz.
Exécution
Projet Zephyr : west build -b nrf52833dk/nrf52833 puis west flash (J-Link embarqué) ; console série 115200 sur le connecteur USB UART.
Variantes
Passer à 0,5 Hz pour un mode veille visible, utiliser le PWM pour une pulsation, ou basculer sur led1/led2 pour un motif 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;
}