From f8ebc967a93abb70ea882225f38814a7f2f45a4d Mon Sep 17 00:00:00 2001 From: Ulf Lilleengen Date: Wed, 20 Oct 2021 14:40:16 +0200 Subject: Add implementation of async trait for STM32 I2C v2 * Add DMA read implementation for I2C v2 * Add example using DMA for I2C --- examples/stm32l4/src/bin/i2c_dma.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 examples/stm32l4/src/bin/i2c_dma.rs (limited to 'examples') diff --git a/examples/stm32l4/src/bin/i2c_dma.rs b/examples/stm32l4/src/bin/i2c_dma.rs new file mode 100644 index 000000000..b0596aab8 --- /dev/null +++ b/examples/stm32l4/src/bin/i2c_dma.rs @@ -0,0 +1,35 @@ +#![no_std] +#![no_main] +#![feature(type_alias_impl_trait)] + +#[path = "../example_common.rs"] +mod example_common; + +use embassy::executor::Spawner; +use embassy::traits::i2c::I2c as I2cTrait; +use embassy_stm32::i2c::I2c; +use embassy_stm32::interrupt; +use embassy_stm32::time::Hertz; +use embassy_stm32::Peripherals; +use example_common::{info, unwrap}; + +const ADDRESS: u8 = 0x5F; +const WHOAMI: u8 = 0x0F; + +#[embassy::main] +async fn main(_spawner: Spawner, p: Peripherals) -> ! { + let irq = interrupt::take!(I2C2_EV); + let mut i2c = I2c::new( + p.I2C2, + p.PB10, + p.PB11, + irq, + p.DMA1_CH4, + p.DMA1_CH5, + Hertz(100_000), + ); + + let mut data = [0u8; 1]; + unwrap!(i2c.write_read(ADDRESS, &[WHOAMI], &mut data).await); + info!("Whoami: {}", data[0]); +} -- cgit