簡體   English   中英

如何通過 teensy4-bsp Rust crate 使用 teensy 4 引腳作為啟用上拉電阻的輸入?

[英]How do you use a teensy 4 pin via the teensy4-bsp Rust crate as an input with the pull-up resistor enabled?

我想弄清楚如何做 Rust 相當於

pinMode(PIN_D7, INPUT_PULLUP); // Pushbutton

(來自https://www.pjrc.com/teensy/td_digital.html

我已經使用模板https://github.com/mciantyre/teensy4-rs-template創建了一個項目,如 https://github.com/mciantyre/teensy4-rs 的入門部分中所述

不幸的是,Rust arduino 代碼是 IntelliJ IDEA 無法完全導航的兔子洞(他們使用宏來生成struct s 和impl s),所以我沒有得到任何有用的完成結果來幫助我弄清楚哪些方法和字段是可用的。

我不確定如何處理pins.p7來激活上拉電阻,甚至對其進行采樣。 p7P7B1_01Pad的文檔讓我仍然感到困惑。

(在這里記錄一些失敗)

我在 crates 中進行了一些實驗和一些文本搜索,並找到了Config結構。

不幸的是,當我這樣使用它時,結果並不可靠。

// pull-down resistor.  Switch drags to 3.3v
fn mission1(mut switch_pin: B0_10, led: &mut LED, systick: &mut SysTick) -> !
{
    let cfg = teensy4_bsp::hal::iomuxc::Config::zero().set_pullupdown(PullUpDown::Pulldown100k);
    iomuxc::configure(&mut switch_pin, cfg);

    let bacon = GPIO::new(switch_pin);

    loop {
        if bacon.is_set() {
            led.toggle()
        }
        systick.delay(300);
    }
}

它仍然拾取虛假的按鈕點擊。 我把事情轉過來,試圖把它裝上引體向上

// pull-up resistor.  Switch drags to ground
fn mission2(mut switch_pin: B0_10, led: &mut LED, systick: &mut SysTick) -> !
{

    let pull_up = match 22
    {
        100 => PullUpDown::Pullup100k, // unreliable
        47 => PullUpDown::Pullup47k, // unreliable
        _ => PullUpDown::Pullup22k,
    };
    let cfg = teensy4_bsp::hal::iomuxc::Config::zero().set_pullupdown(pull_up);
    iomuxc::configure(&mut switch_pin, cfg);

    let bacon = GPIO::new(switch_pin);

    loop {
        if ! bacon.is_set() {
            led.toggle()
        }
        systick.delay(300);
    }
}

所有 3 個上拉選項都沒有用。 我連接了一個萬用表,在開關打開和 22k 上拉電阻選項的情況下,引腳和接地之間的讀數約為.067v。

當我連接一個 10K 物理電阻時,它的行為與我預期的一樣,萬用表測量為 3.23V。 如果我串聯兩個 10K 用於上拉,它的測量值為 3.20V。

我要說這不是Teensy 4.0 的正確技術。

根據對 https://github.com/mciantyre/teensy4-rs/issues/107 的響應和https ://github.com/imxrt-rs/imxrt-hal/issues/112的代碼,我能夠創建以下示例似乎適用於我的 teensy 4.0

let cfg = Config::zero()
    .set_hysteresis(Hysteresis::Enabled)
    .set_pull_keep(PullKeep::Enabled)
    .set_pull_keep_select(PullKeepSelect::Pull)
    .set_pullupdown(PullUpDown::Pulldown100k);
iomuxc::configure(&mut switch_pin, cfg);

let switch_gpio = GPIO::new(switch_pin);

loop {
    if switch_gpio.is_set() {
        led.toggle()
    }
    systick.delay(LED_PERIOD_MS);
}

完整代碼在https://github.com/mciantyre/teensy4-rs/blob/997d92cc880185f22272d1cfd54de54732154bb5/examples/pull_down_pin.rs

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM