我正在尝试将DHT11库用于我的STM32F303VC
我得到错误:
error[E0277]: the trait bound `PE2<Output<OpenDrain>>: _embedded_hal_digital_InputPin` is not satisfied --> src/DHT11/auxiliary/src/lib.rs:51:32 | 51 | let mut dht11 = Dht11::new(pin); | ^^^ the trait `_embedded_hal_digital_InputPin` is not implemented for `PE2<Output<OpenDrain>>` | = note: required because of the requirements on the impl of `embedded_hal::digital::v2::InputPin` for `PE2<Output<OpenDrain>>` = note: required by `Dht11::<GPIO>::new`
我的错误图像:
我的代码在辅助模块中是:
//! Initialization code
#![no_std]
#[allow(unused_extern_crates)] // bug rust-lang/rust#53964
extern crate panic_itm; // panic handler
pub use cortex_m::{asm::bkpt, iprint, iprintln};
pub use cortex_m_rt::entry;
pub use f3::hal::{delay::Delay, prelude, stm32f30x::i2c1};
pub use f3::led::{Direction, Leds};
pub use m::Float as _0;
pub use f3::hal::stm32f30x::{gpioc, rcc};
pub use dht11::{self,Measurement,Dht11};
pub use stm32f30x_hal::gpio;
use f3::hal::stm32f30x::{self, GPIOE, RCC};
pub use embedded_hal::digital::v2::OutputPin;
pub use embedded_hal::digital::v2::InputPin;
use cortex_m::peripheral::ITM;
use f3::{
hal::{
i2c::I2c,
prelude::*,
},
Lsm303dlhc,
};
pub fn init() -> (Delay, ITM, Leds, Dht11<GPIOE>) {
(stm32f30x::Peripherals::take().unwrap());
let cp = cortex_m::Peripherals::take().unwrap();
let dp = stm32f30x::Peripherals::take().unwrap();
let mut flash = dp.FLASH.constrain();
let mut rcc = dp.RCC.constrain();
let clocks = rcc.cfgr.freeze(&mut flash.acr);
let gpioe = dp.GPIOE.split(&mut rcc.ahb);
let leds = Leds::new(gpioe);
let mut gpiob = dp.GPIOB.split(&mut rcc.ahb);
let scl = gpiob.pb6.into_af4(&mut gpiob.moder, &mut gpiob.afrl);
let sda = gpiob.pb7.into_af4(&mut gpiob.moder, &mut gpiob.afrl);
let i2c = I2c::i2c1(dp.I2C1, (scl, sda), 400.khz(), clocks, &mut rcc.apb1);
let pin = gpioe.pe2.into_open_drain_output(&mut gpioe.moder,&mut gpioe.otyper);
let delay = Delay::new(cp.SYST, clocks);
let mut dht11 = Dht11::new(pin);
(delay, cp.ITM, leds, dht11)
}
我的main.rs代码是:
#![deny(unsafe_code)]
#![no_main]
#![no_std]
#[allow(unused_imports)]
use aux19::{entry, iprint, iprintln, prelude::*, Direction};
use aux19::{prelude::_embedded_hal_blocking_delay_DelayMs};
use m::Float;
// Slave address
const MAGNETOMETER: u8 = 0b001_1110;
#[entry]
fn main() -> ! {
let (mut delay, mut itm,mut leds,mut dth11) = aux18::init();
loop {
match dht11.perform_measurement(&mut delay) {
Ok(meas) => iprintln!(&mut itm.stim[0],"Temp: {} Hum: {}", meas.temperature, meas.humidity).unwrap(),
Err(e) => iprintln!(&mut itm.stim[0],"Error: {:?}", e).unwrap(),
};
delay.delay_ms(2_000_u16);
}
}
Dht11::new
期望该引脚是一个输入引脚,即实现embedded_hal::digital::v2::InputPin
的类型。在辅助模块中,您将引脚配置为输出引脚,这与您需要执行的操作相反:
let pin = gpioe.pe2.into_open_drain_output(&mut gpioe.moder,&mut gpioe.otyper);
您正在使用的HAL库有几种将引脚置于输入模式的方法。into_floating_input
可能适用于您的用例。如果您需要上拉或下拉电阻,还有into_pull_down_input
和into_pull_up_input
。请参阅参考留档(出于某种原因,您需要通过单击“”来扩展实现块以查看方法;这也阻止了我直接链接到它们)。
使用其中一个应该可以解决这个错误。
我在和Rust玩,这是代码: 我收到错误消息: 在struct<code>filter::ContentFilter</code>中找到的预期特征对象<code>dyn filter::TFilter</code> =注意:预期引用<代码> 这是误导性的: 它确实实现了该特征 编译器知道 结构的大小 有线索吗? 另外,代码无论如何都不好(因为不清楚返回的盒子是谁的),但信息是误导性的。 缴费灵。那
我有一个设计问题,当使用类似的东西时: 我认为应该有一些更好的方法来实现这种参数化的特性。 我在std中没有找到好的示例(例如,在具有类似的关联类型的traits中没有实现)?
我对Java和OOP都是新手。但是,我使用notify读取一个特征,然后使用read读取回调中的多个特征。 我想知道,为什么在使用readCharacteristic(我的特征)时,只能从单个特征(除了通知的特征)中获取值。蓝牙gatt回调声明如下: 公共布尔值 (BluetoothGattCharacteristic characteristic characteristic)从相关远程设备读取
我试图在生锈中编写一些通用的数学函数,我一直遇到以下错误消息: 有可能解决这个问题吗?如果是,怎么做? 例如,我正在尝试编写一个通用的点积,它使用两个迭代器,对它们进行压缩,并对这些迭代器对进行迭代,以累积积。我希望这个函数也能计算复数点积。复数上的点积包括共轭一面。我的第一个想法是为一个二进制函数编写一个trait,以替换,因为它还与左侧参数共轭。以下是完整的代码: 因为一个
我有一个这样的提供程序设置: 我正在尝试使用actix web中的内置方法,将 或类似的东西。 但是,我反而收到以下错误: 有人能帮我弄清楚怎么解决这个问题吗?我对std::marker::size做了一些研究,但我不知道如何使用它来解决这个问题。
假设我有一个 我可以为任何我可能想要的结构实现,例如: 现在,我想自动我的特征,无论元组是由所有实现特征的类型组成的。直觉上,所有快乐的元组也是快乐的。 有可能做这样的事吗?例如,我可以简单地将的实现扩展到两种类型的任意元组: 因此,这可以完美地编译: 但是我怎么能把它推广到任何长度的元组呢?就我的理解而言,我们在Rust中没有变异的泛型。有变通办法吗?