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中使用
74KB
1K SLoC
Rust DS3231、DS3232和DS3234极精确实时时钟驱动程序
这是一个基于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
。
- 使用多种匹配策略设置闹钟1和2。见
- 波形生成
- 启用和禁用方波生成。见
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(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您提交的任何有意包含在作品中的贡献,都将按上述方式双重许可,没有任何额外的条款或条件。
依赖关系
~1.5MB
~19K SLoC