#实时时钟 #RTC #时钟 #实时 #驱动程序 #嵌入式HAL驱动程序 #I2C驱动程序

无需std ds323x

DS3231、DS3232和DS3234极精确实时时钟(RTC)的平台无关Rust驱动程序

8个版本 (4个破坏性更新)

0.5.1 2023年7月17日
0.5.0 2022年2月21日
0.4.0 2021年5月22日
0.3.2 2021年2月22日
0.1.0 2018年10月31日

#1067 in 嵌入式开发

每月38次下载
rv3028c7-rtc中使用

MIT/Apache

74KB
1K SLoC

Rust DS3231、DS3232和DS3234极精确实时时钟驱动程序

crates.io Docs MSRV Build Status Coverage Status

这是一个基于embedded-hal特质的DS3231、DS3232和DS3234极精确实时时钟的平台无关Rust驱动程序。

此驱动程序允许您

  • 以12小时和24小时格式读取和设置日期和时间。见:datetime
  • 读取和设置日期和时间的各个元素。例如,见:year
  • 启用和禁用实时时钟。见:enable
  • 读取忙碌状态。见 busy
  • 读取是否已停止或正在停止振荡器。见 has_been_stopped
  • 清除已停止标志。见 clear_has_been_stopped_flag
  • 设置和读取老化偏移量。见 set_aging_offset
  • 选择INT/SQW输出引脚的功能。见 use_int_sqw_output_as_interrupt
  • 闹钟
    • 使用多种匹配策略设置闹钟1和2。见 set_alarm1_day
    • 为时间设置闹钟1和2。见 set_alarm1_hms
    • 读取闹钟1或2是否匹配。见 has_alarm1_matched
    • 清除闹钟1或2已匹配的标志。见 clear_alarm1_matched_flag
    • 启用和禁用闹钟1和2的中断生成。见 enable_alarm1_interrupts
  • 波形生成
    • 启用和禁用方波生成。见 enable_square_wave
    • 选择方波频率。见 set_square_wave_frequency
    • 启用和禁用32kHz输出。见 enable_32khz_output
    • 当使用电池供电时启用和禁用32kHz输出。参见 enable_32khz_output_on_battery
  • 温度转换
    • 读取温度。参见 temperature
    • 强制进行温度转换和时间补偿。参见 convert_temperature
    • 设置温度转换率。参见 set_temperature_conversion_rate
    • 当电池供电时启用和禁用温度转换。参见 enable_temperature_conversions_on_battery

设备

此驱动程序与DS3231、DS3232 I2C设备和DS3234 SPI设备兼容。

这些设备是低成本温度补偿晶振(TCXO),具有非常精确的温度补偿集成实时时钟(RTC),包括236/256字节的电池备份SRAM,具体取决于型号。

DS3231和DS3232详细信息

设备包含电池输入,当设备的主电源中断时,可以保持准确的时间。晶振谐振器的集成提高了设备的长期精度,并减少了制造线上的部件数量。这些设备适用于商业和工业温度范围,提供16引脚、300毫英寸SO封装。

RTC维护秒、分、小时、日、日期、月和年信息。月底的日期会自动调整,包括对闰年的修正。时钟以24小时或12小时格式运行,带有AM/PM指示器。提供两个可编程的每日时间闹钟和一个可编程的方波输出。地址和数据通过I2C双向总线串行传输。

精确的温度补偿电压参考和比较电路监控VCC的状态,以检测电源故障,提供复位输出,并在必要时自动切换到备用电源。此外,RST引脚作为按钮输入监控以生成微处理器复位。

DS3234详细信息

DS3234包含精确的温度补偿电压参考和比较电路来监控VCC。当VCC低于电源故障电压(VPF)时,设备激活RST输出,并在VCC低于VPF和VBAT时禁用对组件的读取和写入访问。RST引脚作为按钮输入监控以生成微处理器复位。当设备的主电源中断时,设备切换到备用电源输入并保持准确的时间。晶振谐振器的集成提高了设备的长期精度,并减少了制造线上的部件数量。DS3234适用于商业和工业温度范围,提供行业标准300毫英寸、20引脚SO封装。

DS3234还集成256字节的电池备份SRAM。在主电源断电的情况下,内存的内容由连接到VBAT引脚的电源保持。RTC维护秒、分、小时、日、日期、月和年信息。月底的日期会自动调整,包括对闰年的修正。时钟以24小时或12小时格式运行,带有AM/PM指示器。提供两个可编程的每日时间闹钟和一个可编程的方波输出。地址和数据通过SPI双向总线串行传输。

数据手册

用法

要使用此驱动程序,请导入此crate和一个嵌入式HAL实现,然后实例化适当的设备。以下示例将创建DS3231设备的实例。其他设备可以使用类似的方法创建,例如:Ds323x::new_ds3234(...)

请在此存储库中查找使用硬件的附加示例:driver-examples

use ds323x::{DateTimeAccess, Ds323x, NaiveDate, Rtcc};
use linux_embedded_hal::I2cdev;

fn main() {
    let dev = I2cdev::new("/dev/i2c-1").unwrap();
    let mut rtc = Ds323x::new_ds3231(dev);
    let datetime = NaiveDate::from_ymd_opt(2020, 5, 1)
        .unwrap()
        .and_hms_opt(19, 59, 58)
        .unwrap();
    rtc.set_datetime(&datetime).unwrap();
    // do something else...
    let time = rtc.time().unwrap();
    println!("Time: {}", time);

    let _dev = rtc.destroy_ds3231();
}

支持

有关问题、问题、功能请求(如与其他设备的兼容性和其他更改),请在github项目中提交问题

最小支持的Rust版本(MSRV)

此crate保证在稳定Rust 1.35及以上版本上编译。它可能可以用较旧版本编译,但可能会在任何新补丁版本中更改。

许可证

许可协议为以下之一

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您提交的任何有意包含在作品中的贡献,都将按上述方式双重许可,没有任何额外的条款或条件。

依赖关系

~1.5MB
~19K SLoC