HAL ํฌ๋ ˆ์ดํŠธ๋“ค

๋‹ค์–‘ํ•œ ์ฃผ๋ณ€ ์žฅ์น˜์— ๋Œ€ํ•œ ๋ž˜ํผ๋ฅผ ์ œ๊ณตํ•˜๋Š” HAL ํฌ๋ ˆ์ดํŠธ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํฌ๋ ˆ์ดํŠธ๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ embedded-hal์˜ ํŠธ๋ ˆ์ž‡์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

#![no_main]
#![no_std]

extern crate panic_halt as _;

use cortex_m_rt::entry;
use nrf52833_hal::gpio::{p0, Level};
use nrf52833_hal::pac::Peripherals;
use nrf52833_hal::prelude::*;

#[entry]
fn main() -> ! {
    let p = Peripherals::take().unwrap();

    // GPIO ํฌํŠธ 0์˜ HAL ๋ž˜ํผ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    let gpio0 = p0::Parts::new(p.P0);

    // GPIO 0 ํ•€ 21 ๋ฐ 28์„ ํ‘ธ์‹œ-ํ’€ ์ถœ๋ ฅ์œผ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    let mut col1 = gpio0.p0_28.into_push_pull_output(Level::High);
    let mut row1 = gpio0.p0_21.into_push_pull_output(Level::Low);

    // ํ•€ 28์„ ๋‚ฎ๊ฒŒ, ํ•€ 21์„ ๋†’๊ฒŒ ์„ค์ •ํ•˜์—ฌ LED๋ฅผ ์ผญ๋‹ˆ๋‹ค.
    col1.set_low().unwrap();
    row1.set_high().unwrap();

    loop {}
}
  • set_low ๋ฐ set_high๋Š” embedded_hal OutputPin ํŠธ๋ ˆ์ž‡์˜ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.
  • ๋‹ค์–‘ํ•œ STM32, GD32, nRF, NXP, MSP430, AVR, PIC ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋น„๋กฏํ•œ ๋งŽ์€ Cortex-M ๋ฐ RISC-V ๊ธฐ๊ธฐ๋ฅผ ์œ„ํ•œ HAL ํฌ๋ ˆ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค

์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”.

cargo embed --bin hal