20次发布
0.3.13 | 2019年10月15日 |
---|---|
0.3.10 | 2019年2月23日 |
0.3.9 | 2018年7月16日 |
0.3.5 | 2018年3月18日 |
在嵌入式开发中排名第1721
每月下载量29次
24KB
594 行
使用方法
以下是一个如何创建新的OneWire实例、搜索设备和从DS18B20读取温度的示例。当前的示例需要将stm32f103xx-hal修补为这个PR。
fn main() -> ! {
let mut cp: cortex_m::Peripherals = cortex_m::Peripherals::take().unwrap();
let mut peripherals = stm32f103xx::Peripherals::take().unwrap();
let mut flash = peripherals.FLASH.constrain();
let clocks = rcc.cfgr.freeze(&mut flash.acr);
let mut rcc = peripherals.RCC.constrain();
let mut gpioc = peripherals.GPIOC.split(&mut rcc.apb2);
let mut delay = stm32f103xx_hal::delay::Delay::new(cp.SYST, clocks);
let mut one = gpioc
.pc15
.into_open_drain_output(&mut gpioc.crh)
.downgrade();
let mut wire = OneWire::new(&mut one, false);
if wire.reset(&mut delay).is_err() {
// missing pullup or error on line
loop {}
}
// search for devices
let mut search = DeviceSearch::new();
while let Some(device) = wire.search_next(&mut search, &mut delay).unwrap() {
match device.address[0] {
ds18b20::FAMILY_CODE => {
let mut ds18b20 = DS18b20::new(device).unwrap();
// request sensor to measure temperature
let resolution = ds18b20.measure_temperature(&mut wire, &mut delay).unwrap();
// wait for compeltion, depends on resolution
delay.delay_ms(resolution.time_ms());
// read temperature
let temperature = ds18b20.read_temperature(&mut wire, &mut delay).unwrap();
},
_ => {
// unknown device type
}
}
}
loop {}
}
示例中的代码是从一个工作项目中复制粘贴的,但在这个特定组合中未进行测试。
依赖关系
~190KB