Crates.io | pcf8563 |
lib.rs | pcf8563 |
version | 0.1.2 |
source | src |
created_at | 2021-04-17 17:31:52.785356 |
updated_at | 2021-10-17 10:58:31.16289 |
description | Platform-agnostic Rust driver for the NXP PCF8563 real-time clock. |
homepage | https://github.com/nebelgrau77/pcf8563-rs |
repository | https://github.com/nebelgrau77/pcf8563-rs |
max_upload_size | |
id | 385828 |
size | 55,763 |
A platform agnostic Rust driver for the NXP PCF8563 real-time clock,
based on the embedded-hal
traits.
Based on this RTC driver
This driver allows you to:
get_datetime
and set_datetime
get_timer_frequency
functionget_timer_interrupt_mode
functionget_clkout_frequency
functionHow this driver was won written
The PCF8563 is a CMOS Real-Time Clock (RTC) and calendar optimized for low power consumption. A programmable clock output, interrupt output, and voltage-low detector are also provided. All addresses and data are transferred serially via a two-line bidirectional I2C-bus. Maximum bus speed is 400 kbit/s. The register address is incremented automatically after each written or read data byte.
Provides year, month, day, weekday, hours, minutes, and seconds based on a 32.768 kHz quartz crystal.
Datasheet: PCF8563
To use this driver, import this crate and an embedded_hal
implementation,
then instantiate the device.
Please find additional examples using hardware in this repository: examples
#![no_main]
#![no_std]
use cortex_m;
use cortex_m_rt::entry;
use panic_halt as _;
use stm32l4xx_hal::{
delay::Delay,
prelude::*,
serial::{Config, Serial},
i2c::I2c,
};
use pcf8563::*;
use core::fmt::Write;
#[entry]
fn main() -> ! {
let cp = cortex_m::Peripherals::take().unwrap();
let dp = stm32l4xx_hal::stm32::Peripherals::take().unwrap();
// set up the flash, reset & clock control, and power control
// set up the clocks
// set up GPIO ports
// set up LED for some blinking
// set up USART
// get the delay provider
// set up I2C bus
// set up the PCF8563 device
let mut rtc = PCF8563::new(i2c);
// prepare date and time to be set
let now = DateTime {
year: 21, // 2021
month: 4, // April
weekday: 0, // Sunday
day: 4,
hours: 16,
minutes: 52,
seconds: 00,
};
// set date and time in one go
rtc.set_datetime(&now).unwrap();
loop {
led.set_high().ok();
delay.delay_ms(500 as u32);
//get date and time in one go
let time = rtc.get_datetime().unwrap();
writeln!(tx, "{:02}/{:02}/{:02} {:02}:{:02}:{:02} day {}\r",
time.year, time.month, time.day,
time.hours, time.minutes, time.seconds,
time.weekday).unwrap();
led.set_low().ok();
delay.delay_ms(500 as u32);
}
}
For questions, issues, feature requests, and other changes, please file an issue in the github project.
Licensed under either of
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.