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

Приём одного байта

Пока что мы умеем отправлять данные с микроконтроллера на компьютер. Пора попробовать обратное: принимать данные с компьютера (examples/receive-byte.rs).

#![no_main]
#![no_std]

use cortex_m_rt::entry;
use panic_rtt_target as _;
use rtt_target::{rprintln, rtt_init_print};

use microbit::hal::uarte::{self, Baudrate, Parity};

use serial_setup::UartePort;

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

    let mut serial = {
        let serial = uarte::Uarte::new(
            board.UARTE0,
            board.uart.into(),
            Parity::EXCLUDED,
            Baudrate::BAUD115200,
        );
        UartePort::new(serial)
    };

    loop {
        let byte = serial.read().unwrap();
        rprintln!("{}", byte);
    }
}

По сравнению с программой отправки байта изменилась только часть — цикл в конце main(). Здесь мы используем функцию serial.read(), чтобы дождаться доступности байта и прочитать его. Затем выводим этот байт в нашу отладочную консоль RTT, чтобы проверить, действительно ли данные поступают.

Обратите внимание: если вы прошьёте эту программу и начнёте печатать символы в minicom, чтобы отправить их микроконтроллеру, в консоли RTT вы увидите только числа: мы не преобразуем полученный u8 в настоящий char. Поскольку преобразование из u8 в char довольно простое, оставлю эту задачу вам, если действительно хотите видеть символы в консоли RTT.