🛠 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.

El contexto

El BSP comunitario nrf-rs/nrf52840-mdk-rs (doble licencia MIT/Apache-2.0) proporciona soporte para la placa dentro del ecosistema Rust embebido: reexporta nrf52840-hal y expone los pines del conector doble de 18 pines — el LED RGB y el botón de usuario son pines P0 ordinarios (consulte el esquema de pines de la placa para la asignación exacta). Advertencia del repositorio: el ecosistema embedded-hal evoluciona rápidamente, tome la versión canónica de los ejemplos en examples/ del crate.

Paso 1 — Toolchain

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

Paso 2 — El proyecto blinky

Adaptado de los ejemplos del crate — verifique la API actual en 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

Paso 3 — Flashear: el punto crítico

El README del BSP es explícito: su mantenedor nunca logró hacer funcionar la sonda integrada con OpenOCD proporcionado por Ubuntu 18.04, y trabaja con un J-Link externo. Dos estrategias 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

Paso 4 — Depuración

Con el J-Link: probe-rs o cargo embed para carga en caliente, GDB e inspección de los registros del Cortex-M4F. Sin sonda externa, el puerto CDC del DAPLink sigue disponible para el registro serie.

Lo que le aporta el BSP

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales