1 unstable release
new 0.1.0 | May 4, 2025 |
---|
#503 in Embedded development
71KB
1.5K
SLoC
DS3231 Real-Time Clock Driver
A platform-agnostic Rust driver for the DS3231 Real-Time Clock, built on the embedded-hal
ecosystem.
The DS3231 is a low-cost, extremely accurate I²C real-time clock (RTC) with an integrated
temperature-compensated crystal oscillator (TCXO) and crystal.
- Both blocking and async I²C operation support
- Full register access (time/date, alarms, control, status)
- Optional logging support via
log
ordefmt
- No
unsafe
code - Comprehensive error handling
Usage
Add this to your Cargo.toml
:
[dependencies]
ds3231 = "0.1" # Replace with actual version
Blocking Example
use ds3231::{DS3231, Config, TimeRepresentation, SquareWaveFrequency, InterruptControl, Ocillator};
// Create configuration
let config = Config {
time_representation: TimeRepresentation::TwentyFourHour,
square_wave_frequency: SquareWaveFrequency::Hz1,
interrupt_control: InterruptControl::SquareWave,
battery_backed_square_wave: false,
oscillator_enable: Ocillator::Enabled,
};
// Initialize device with I2C
let mut rtc = DS3231::new(i2c, 0x68);
// Configure the device
rtc.configure(&config)?;
// Get current date/time
let datetime = rtc.datetime()?;
Async Example
Enable the async feature in your Cargo.toml
:
[dependencies]
ds3231 = { version = "0.1", features = ["async"] }
Then use with async/await:
use ds3231::asynch::DS3231;
// Initialize device
let mut rtc = DS3231::new(i2c, 0x68);
// Configure asynchronously
rtc.configure(&config).await?;
// Get current date/time asynchronously
let datetime = rtc.datetime().await?;
Features
The crate can be compiled with the following features:
async
: Enables async I²C supportlog
: Enables logging via thelog
cratedefmt
: Enables logging via thedefmt
crate
License
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~1.2–2MB
~36K SLoC