diff --git a/2sem_spi/src/bin/main.rs b/2sem_spi/src/bin/main.rs index f228ece..2b6d758 100644 --- a/2sem_spi/src/bin/main.rs +++ b/2sem_spi/src/bin/main.rs @@ -5,6 +5,7 @@ use defmt::*; use embassy_executor::Spawner; use embassy_stm32::spi::{Config, Spi}; +use embassy_stm32::gpio::{Pull, Level, Speed, Output}; use embassy_time::{Duration, Timer}; use {defmt_rtt as _, panic_probe as _}; @@ -14,33 +15,37 @@ async fn main(_spawner: Spawner) { let p = embassy_stm32::init(Default::default()); - let mut i2c_cfg = Config::default(); - i2c_cfg.sda_pullup = true; - i2c_cfg.scl_pullup = true; - i2c_cfg.timeout = Duration::from_millis(200); + let mut spi = Spi::new_blocking(p.SPI1, p.PA5, p.PA7, p.PA6, Config::default()); + let mut cs = Output::new(p.PA4, Level::High, Speed::VeryHigh); - let mut i2c = I2c::new_blocking(p.I2C3, p.PC0, p.PC1, i2c_cfg); - let addr = 0x23; - - if let Err(e) = i2c.blocking_write(addr, &[0x01, 0x79]) { + cs.set_low(); + if let Err(e) = spi.blocking_write(&[0x01u8, 0x79u8]) { error!("Nepodarilo sa aktivovať CMM: {:?}", e); } + cs.set_high(); loop { - let mut raw = [0u8; 9]; - match i2c.blocking_write_read(addr, &[0x24], &mut raw) { + let mut data = [0u8; 10]; + + data[0] = 0xA4; + + cs.set_low(); + let result = spi.blocking_transfer_in_place(&mut data); + cs.set_high(); + + match result { Ok(_) => { - let x = i32::from_be_bytes([raw[0], raw[1], raw[2], 0]) >> 8; - let y = i32::from_be_bytes([raw[3], raw[4], raw[5], 0]) >> 8; - let z = i32::from_be_bytes([raw[6], raw[7], raw[8], 0]) >> 8; - info!("X: {}, Y: {}, Z: {}", x, y, z); - } - Err(e) => { - error!("Chyba pri čítaní: {:?}", e); + // index 0, len potvrdenie prijatia adresy + let raw = &data[1..]; + + info!("X: {:02x}{:02x}{:02x} Y: {:02x}{:02x}{:02x} Z: {:02x}{:02x}{:02x}", + raw[0], raw[1], raw[2], + raw[3], raw[4], raw[5], + raw[6], raw[7], raw[8]); } + Err(e) => error!("SPI error: {:?}", e), } - // Čítajte napríklad každých 100ms. Dáta v registroch budú vždy najaktuálnejšie dokončené meranie. Timer::after(Duration::from_millis(100)).await; } }