aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchemicstry <[email protected]>2022-10-24 22:48:40 +0300
committerchemicstry <[email protected]>2022-10-24 22:48:40 +0300
commit52c03cf0a4ae5a7a6374e6acac123670b83860fe (patch)
treeb76df86eda0fb573fe9ff4743af2c69fdc86e2c6
parentac61e0ee9fcec2792c73806afe4c998019b0db75 (diff)
Add more docs
-rw-r--r--embassy-stm32/src/i2c/timeout.rs3
-rw-r--r--examples/stm32f4/src/bin/i2c.rs3
-rw-r--r--examples/stm32h7/src/bin/i2c.rs3
3 files changed, 9 insertions, 0 deletions
diff --git a/embassy-stm32/src/i2c/timeout.rs b/embassy-stm32/src/i2c/timeout.rs
index fd9a753a5..4fca1ca2b 100644
--- a/embassy-stm32/src/i2c/timeout.rs
+++ b/embassy-stm32/src/i2c/timeout.rs
@@ -3,6 +3,9 @@ use embassy_time::{Duration, Instant};
3use super::{Error, I2c, Instance}; 3use super::{Error, I2c, Instance};
4 4
5/// An I2C wrapper, which provides `embassy-time` based timeouts for all `embedded-hal` trait methods. 5/// An I2C wrapper, which provides `embassy-time` based timeouts for all `embedded-hal` trait methods.
6///
7/// This is useful for recovering from a shorted bus or a device stuck in a clock stretching state.
8/// A regular [I2c] would freeze until condition is removed.
6pub struct TimeoutI2c<'d, T: Instance, TXDMA, RXDMA> { 9pub struct TimeoutI2c<'d, T: Instance, TXDMA, RXDMA> {
7 i2c: &'d mut I2c<'d, T, TXDMA, RXDMA>, 10 i2c: &'d mut I2c<'d, T, TXDMA, RXDMA>,
8 timeout: Duration, 11 timeout: Duration,
diff --git a/examples/stm32f4/src/bin/i2c.rs b/examples/stm32f4/src/bin/i2c.rs
index 12965d2b8..6e51c211d 100644
--- a/examples/stm32f4/src/bin/i2c.rs
+++ b/examples/stm32f4/src/bin/i2c.rs
@@ -30,6 +30,9 @@ async fn main(_spawner: Spawner) -> ! {
30 Hertz(100_000), 30 Hertz(100_000),
31 Default::default(), 31 Default::default(),
32 ); 32 );
33
34 // I2C bus can freeze if SCL line is shorted or due to a broken device that clock stretches for too long.
35 // TimeoutI2c allows recovering from such errors by throwing `Error::Timeout` after a given delay.
33 let mut timeout_i2c = TimeoutI2c::new(&mut i2c, Duration::from_millis(1000)); 36 let mut timeout_i2c = TimeoutI2c::new(&mut i2c, Duration::from_millis(1000));
34 37
35 let mut data = [0u8; 1]; 38 let mut data = [0u8; 1];
diff --git a/examples/stm32h7/src/bin/i2c.rs b/examples/stm32h7/src/bin/i2c.rs
index 7a314b996..d44319ae6 100644
--- a/examples/stm32h7/src/bin/i2c.rs
+++ b/examples/stm32h7/src/bin/i2c.rs
@@ -29,6 +29,9 @@ async fn main(_spawner: Spawner) -> ! {
29 Hertz(100_000), 29 Hertz(100_000),
30 Default::default(), 30 Default::default(),
31 ); 31 );
32
33 // I2C bus can freeze if SCL line is shorted or due to a broken device that clock stretches for too long.
34 // TimeoutI2c allows recovering from such errors by throwing `Error::Timeout` after a given delay.
32 let mut timeout_i2c = TimeoutI2c::new(&mut i2c, Duration::from_millis(1000)); 35 let mut timeout_i2c = TimeoutI2c::new(&mut i2c, Duration::from_millis(1000));
33 36
34 let mut data = [0u8; 1]; 37 let mut data = [0u8; 1];