aboutsummaryrefslogtreecommitdiff
path: root/examples/stm32f4
diff options
context:
space:
mode:
authorUlf Lilleengen <[email protected]>2023-10-12 10:44:27 +0000
committerGitHub <[email protected]>2023-10-12 10:44:27 +0000
commit01eb1a73396002bf0a335f51d31328d21b32bb02 (patch)
tree910a705a484f59bd385fc58ecd1038889b8131eb /examples/stm32f4
parenteb368f77a46682f76dcc4d75f9ba4ce80dfb4193 (diff)
parentf0d6ee69bcac6a22213c06f303176daf9f5445ff (diff)
Merge pull request #2033 from andresovela/stm32-add-timeout-to-i2c
stm32: add timeout to I2C driver
Diffstat (limited to 'examples/stm32f4')
-rw-r--r--examples/stm32f4/src/bin/i2c.rs9
1 files changed, 2 insertions, 7 deletions
diff --git a/examples/stm32f4/src/bin/i2c.rs b/examples/stm32f4/src/bin/i2c.rs
index a92957325..032bd97ee 100644
--- a/examples/stm32f4/src/bin/i2c.rs
+++ b/examples/stm32f4/src/bin/i2c.rs
@@ -5,10 +5,9 @@
5use defmt::*; 5use defmt::*;
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_stm32::dma::NoDma; 7use embassy_stm32::dma::NoDma;
8use embassy_stm32::i2c::{Error, I2c, TimeoutI2c}; 8use embassy_stm32::i2c::{Error, I2c};
9use embassy_stm32::time::Hertz; 9use embassy_stm32::time::Hertz;
10use embassy_stm32::{bind_interrupts, i2c, peripherals}; 10use embassy_stm32::{bind_interrupts, i2c, peripherals};
11use embassy_time::Duration;
12use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
13 12
14const ADDRESS: u8 = 0x5F; 13const ADDRESS: u8 = 0x5F;
@@ -34,13 +33,9 @@ async fn main(_spawner: Spawner) {
34 Default::default(), 33 Default::default(),
35 ); 34 );
36 35
37 // I2C bus can freeze if SCL line is shorted or due to a broken device that clock stretches for too long.
38 // TimeoutI2c allows recovering from such errors by throwing `Error::Timeout` after a given delay.
39 let mut timeout_i2c = TimeoutI2c::new(&mut i2c, Duration::from_millis(1000));
40
41 let mut data = [0u8; 1]; 36 let mut data = [0u8; 1];
42 37
43 match timeout_i2c.blocking_write_read(ADDRESS, &[WHOAMI], &mut data) { 38 match i2c.blocking_write_read(ADDRESS, &[WHOAMI], &mut data) {
44 Ok(()) => info!("Whoami: {}", data[0]), 39 Ok(()) => info!("Whoami: {}", data[0]),
45 Err(Error::Timeout) => error!("Operation timed out"), 40 Err(Error::Timeout) => error!("Operation timed out"),
46 Err(e) => error!("I2c Error: {:?}", e), 41 Err(e) => error!("I2c Error: {:?}", e),