🛠 Développer en Rust embarqué avec nrf52840-mdk-rs

nRF52840-MDK (id boards.json : nrf52840-mdk) · avance · Le BSP communautaire nrf52840-mdk-rs apporte Rust sans std sur la carte : hal, pins, et un chemin de flash fiable malgré les soucis OpenOCD.

Le contexte

Le BSP communautaire nrf-rs/nrf52840-mdk-rs (double licence MIT/Apache-2.0) fournit le support de la carte pour l'écosystème Rust embarqué : il ré-exporte nrf52840-hal et expose les broches de l'en-tête double 18 broches — la LED RGB et le bouton utilisateur sont des broches P0 ordinaires (voyez le schéma de brochage de la carte pour l'affectation exacte). Avertissement du dépôt : l'écosystème embedded-hal bouge vite, prenez la version canonique des exemples dans examples/ du crate.

Étape 1 — Toolchain

rustup target add thumbv7em-none-eabihf   # Cortex-M4F avec FPU
cargo install cargo-binutils             # pour produire l'hex via rust-objcopy

Étape 2 — Le projet blinky

Adapté des exemples du crate — vérifiez l'API courante dans examples/ :

//! examples/blinky.rs — nrf52840-mdk-rs
#![no_std]
#![no_main]

use embedded_hal::digital::OutputPin;
use nrf52840_mdk::hal;
use panic_halt as _;

#[cortex_m_rt::entry]
fn main -> ! {
    let p = hal::nb::new(
        nrf52840_mdk::hal::pac::Peripherals::take.unwrap,
        hal::InitialPeripherals::default,
    );
    // Broche P0 ordinaire de l'en-tête — l'affectation LED vient du pinout
    let mut led = p.pins.p0_13.into_push_pull_output(hal::port::typestate::PushPull);
    loop {
        led.set_high.ok;
        cortex_m::asm::nop;      // du vrai code utilise un timer
        led.set_low.ok;
        cortex_m::asm::nop;
    }
}
cargo build --release --example blinky --target thumbv7em-none-eabihf

Étape 3 — Flasher : le point sensible

Le README du BSP est explicite : son mainteneur n'a jamais réussi à faire fonctionner la sonde embarquée avec l'OpenOCD fourni par Ubuntu 18.04, et travaille avec un J-Link externe. Deux stratégies fiables :

rust-objcopy --output-target=hexfile target/thumbv7em-none-eabihf/release/example-blinky \
             blinky.hex
# déposer blinky.hex sur le lecteur DAPLINK, puis bouton Boot/Reset

Étape 4 — Débogage

Avec le J-Link : probe-rs ou cargo embed pour chargement à chaud, GDB et inspection des registres du Cortex-M4F. Sans sonde externe, le port CDC du DAPLink reste disponible pour la journalisation série.

Ce que le BSP vous apporte

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels