ํƒ€์ž… ์ƒํƒœ ํŒจํ„ด

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

    let pin: P0_01<Disconnected> = gpio0.p0_01;

    // let gpio0_01_again = gpio0.p0_01; // ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.
    let pin_input: P0_01<Input<Floating>> = pin.into_floating_input();
    if pin_input.is_high().unwrap() {
        // ...
    }
    let mut pin_output: P0_01<Output<OpenDrain>> = pin_input
        .into_open_drain_output(OpenDrainConfig::Disconnect0Standard1, Level::Low);
    pin_output.set_high().unwrap();
    // pin_input.is_high(); // ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

    let _pin2: P0_02<Output<OpenDrain>> = gpio0
        .p0_02
        .into_open_drain_output(OpenDrainConfig::Disconnect0Standard1, Level::Low);
    let _pin3: P0_03<Output<PushPull>> =
        gpio0.p0_03.into_push_pull_output(Level::Low);

    loop {}
}
  • ํ•€์€ Copy ๋˜๋Š” Clone์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐ๊ฐ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•€์„ ํฌํŠธ ๊ตฌ์กฐ์ฒด ๋ฐ–์œผ๋กœ ์ด๋™ํ•˜๋ฉด ์•„๋ฌด๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ํ•€ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์ด์ „ ํ•€ ์ธ์Šคํ„ด์Šค๊ฐ€ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ์ดํ›„์— ์ด์ „ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๊ฐ’ ํƒ€์ž…์€ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด ๊ฒฝ์šฐ์—๋Š” GPIO ํ•€์˜ ๊ตฌ์„ฑ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ƒํƒœ ๋จธ์‹ ์ด ํƒ€์ž… ์‹œ์Šคํ…œ์œผ๋กœ ์ธ์ฝ”๋”ฉ๋˜๋ฉฐ, ๋จผ์ € ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑํ•œ ํ›„ ํŠน์ • ๋ฐฉ์‹์œผ๋กœ ํ•€์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ์ƒํƒœ ์ „ํ™˜์€ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ํฌ์ฐฉ๋ฉ๋‹ˆ๋‹ค.
  • ์ž…๋ ฅ ํ•€์—์„œ is_high๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ถœ๋ ฅ ํ•€์—์„œ set_high๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ ๋ฐ˜๋Œ€๋กœ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  • ๋งŽ์€ HAL ํฌ๋ ˆ์ดํŠธ๋“ค์ด ์ด ํŒจํ„ด์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.