Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Крейт поддержки платы

Работать напрямую с PAC и HAL — довольно здорово. У большинства Arm-микроконтроллеров и у многих других MCU, под которые умеет собирать Rust, есть PAC-крейт. Если для вашего MCU его нет, написать PAC-крейт может быть утомительно, но в целом это несложно. У многих MCU с PAC-крейтом есть и HAL-крейт; если его нет, его тоже придётся писать, и опять же работа довольно рутинная. Код на уровне PAC и HAL даёт доступ к тонким деталям MCU.

Однако, как мы уже видели, довольно неудобно постоянно следить за тем, что происходит на стыке нашего nRF52833 и остальной части MB2. Нам приходилось читать схемы и прочие документы, чтобы понять, как пользоваться остальным оборудованием платы.

«Крейт поддержки платы» (в не-Rust-сообществе встраиваемых систем известный как Board Support Package, BSP) — это крейт, построенный поверх HAL и PAC для конкретной платы; он скрывает подробности и предоставляет удобные средства. Крейт поддержки платы, с которым мы работали, — это крейт microbit-v2.

Используем microbit-v2, чтобы получить окончательную, аккуратную мигалку (src/main.rs).

#![no_main]
#![no_std]

use cortex_m_rt::entry;
use embedded_hal::{delay::DelayNs, digital::OutputPin};
use microbit::hal::{gpio, timer};
use panic_halt as _;

#[entry]
fn main() -> ! {
    let board = microbit::Board::take().unwrap();

    let mut row1 = board
        .display_pins
        .row1
        .into_push_pull_output(gpio::Level::High);
    let _col1 = board
        .display_pins
        .col1
        .into_push_pull_output(gpio::Level::Low);

    let mut timer0 = timer::Timer::new(board.TIMER0);

    loop {
        timer0.delay_ms(500);
        row1.set_high().unwrap();
        timer0.delay_ms(500);
        row1.set_low().unwrap();
    }
}

В этот раз мы изменили немного. Наш крейт поддержки платы скрыл PAC (пока что). Что важнее, он сделал это, позволив нам просто использовать понятные имена для строк и столбцов GPIO-выводов светодиода.

Крейт microbit-v2 предоставляет ещё более продвинутую поддержку для светодиодного «дисплея». Скоро мы увидим, как она используется для задач поинтереснее мигалки.