STC8H开发(十四): I2C驱动RX8025T高精度实时时钟芯片
目录
- STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解)
- STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解)
- STC8H开发(三): 基于FwLib_STC8的模数转换ADC介绍和演示用例说明
- STC8H开发(四): FwLib_STC8 封装库的介绍和使用注意事项
- STC8H开发(五): SPI驱动nRF24L01无线模块
- STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块
- STC8H开发(七): I2C驱动MPU6050三轴加速度+三轴角速度检测模块
- STC8H开发(八): NRF24L01无线传输音频(对讲机原型)
- STC8H开发(九): STC8H8K64U模拟USB HID外设
- STC8H开发(十): SPI驱动Nokia5110 LCD(PCD8544)
- STC8H开发(十一): GPIO单线驱动多个DS18B20数字温度计
- STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储
- STC8H开发(十三): I2C驱动DS3231高精度实时时钟芯片
- STC8H开发(十四): I2C驱动RX8025T高精度实时时钟芯片
计时时钟芯片概览
常用的计时时钟芯片有 DS12C887, DS1302, DS1307, DS3231, RX8025, 各型号还有衍生型号. 可以看到到大部分是Dallas生产的芯片, RX8025的厂商是Epson. 其中
- DS1302 和 DS1307 可以看成是同一芯片的不同协议版本(SPI和I2C), 需要外接晶振, 如果晶振不带温补, 计时误差受温度影响较大.
- DS12C887是内建晶振的DS12C885, 在出厂时已经经过校准, 在+25°C时误差为±1分钟/月. DS12C887使用并口, 比较浪费IO资源, 另外体积也较大, 现在大都用于DIY用途.
- DS3231 自带温补晶振, 精度很高, 在[-40°C, 85°C]范围内误差 ±0.432秒/天(±13秒/月). 是当之无愧的明星型号, 市面上有成品模块, 有Arduino lib, 用起来相当方便.
- RX8025 也自建温补晶振, 精度与 DS3231 相当, 但是在市面上少见得多. 作为一个性价比非常高的型号, 有必要单独介绍一下.
RX8025T 简介

RX8025T 是高精度I2C实时时钟芯片, I2C总线地址为固定的0x64
- 400 kHz I2C接口
- 内置 32.768 kHz 温度补偿晶振(DTCXO), 计时精度很高
- 计时包含秒, 分, 时, 日, (周)日, 月, 年, 没有世纪. 对年份2000至2099有闰年补偿
- 1个可编程闹钟, 支持按天及按周天循环
- 方波输出, 定时器输出
- 贮存温度[-55°C, 125°C], 工作温度[-40°C, 85°C]
- 误差(3.0V电压)
- 温度范围[ 0°C, 50°C], 误差 ±10秒/月
- 温度范围[-40°C, 85°C], 误差 ±13秒/月
- 工作电压 1.6V - 5.5V (typical: 3.0V), 电压低于2.2V时, 温度补偿停止工作
- 时钟保持电压 1.2V - 5.5V
- 工作电流 0.8μA - 20 μA, 温补工作峰值电流900μA
RX8025T 与 RX8025SA/NB 的区别
注意, RX-8025T 与 RX-8025SA/NB 只是部分相同, Pin不兼容, 寄存器也不完全相同
- PIN: RX8025T 只有一个 /INT, RX8025SA 有两个 /INTA和/INTB
- 寄存器0x07:RX8025T 为 RAM 可以读写, RX8025SA 为 Digital Offset 用于调节 32.768 kHz 晶振精度
- 闹钟定义: RX8025T 为 0X08,0x09,0x0A, RX8025SA 为 周[0x08,0x09,0x0A], 日[0x0B,0x0C]
- 定时器: RX8025T 带一个双字节(12bit)计数器, RX8025SA 没有
- 小时格式: RX8025T 只支持24H, RX8025SA 区分12H和24H
RX8025T 与 DS3231 相比
二者精度都很高, 误差接近
- DS3231 有备用电池pin, RX8025T 没有
- DS3231 有两组闹钟, RX8025T 只有一组闹钟
- DS3231 没有定时器, RX8025T 有定时器
RX8025T 管脚和典型电路
管脚

| PIN | Name | I/O | 说明 |
|---|---|---|---|
| 1 | T1(CE) | Input | 厂商测试 (不连接) |
| 2 | SCL | Input | I2C的时钟 |
| 3 | FOUT | Output | C-MOS 输出, 由 FOE 控制. 当 FOE 为高电平时, 输出 32.768 kHz 信号, 当停止输出时, FOUT pin 表现为高阻态 (high impedance) |
| 4 | N.C. | ||
| 5 | TEST | Input | 厂商测试 (不连接) |
| 6 | VDD | 供电正电压 | |
| 7 | FOE | Input | 用于控制 FOUT pin 的输出. 当此pin为高电平时, FOUT pin 为输出模式, 低电平时 FOUT pin 停止输出. |
| 8 | N.C. | ||
| 9 | N.C. | ||
| 10 | /INT | Output | 这个 pin 用于输出闹钟信号, 定时器信号, 时钟更新信号等, 这个pin为开漏输出. |
| 11 | GND | 接地 | |
| 12 | T2(VPP) | 厂商测试 (不连接) | |
| 13 | SDA | I/O | I2C的数据输入输出, 输出时为 N-ch open drain, 需要上拉电阻. |
| 14 | N.C. |
带备用电池的电路

RX8025T 的寄存器
| Addr | Name | 说明 |
|---|---|---|
| 0x00 | SEC | 计时秒, BCD码[0, 59], 前六位有效 |
| 0x01 | MIN | 计时分钟, BCD码[0, 59], 前六位有效 |
| 0x02 | HOUR | 计时小时, BCD码[0, 23], 24小时制, 前五位有效 |
| 0x03 | WEEK | 计时日(周天), 每一个bit代表一天, 从bit0至bit6依次为周日, 周一, ..., 周六 |
| 0x04 | DAY | 计时日, BCD码[1, 31], 前五位有效 |
| 0x05 | MONTH | 计时月, BCD码[1, 12], 前四位有效 |
| 0x06 | YEAR | 计时年, BCD码[0, 99], 全八位有效 |
| 0x07 | RAM | 非功能, 可读写区域 |
| 0x08 | MIN Alarm | 闹钟分钟, BCD码[0, 59], 前六位有效. 第七位AE标识是否忽略(不参与比较), 0:否, 1:是 |
| 0x09 | HOUR Alarm | 闹钟小时, BCD码[0, 23], 前五位有效. 第七位AE标识是否忽略 |
| 0x0A | WEEK Alarm / DAY Alarm | 闹钟日(周天/日), 由 WADA 寄存器控制 |
| 闹钟周天, 每一个bit代表一天, 从bit0至bit6依次为周日至周六, 第七位AE标识是否忽略 | ||
| 闹钟日, BCD码[1, 31], 前五位有效, 第七位AE标识是否忽略 | ||
| 0x0B | Timer Counter 0 | 计数器的低8位, HEX码(正常数值) |
| 0x0C | Timer Counter 1 | 计数器的高4位, HEX码(正常数值) |
| 0x0D | Extension Register | 扩展功能寄存器 |
| 0x0E | Flag Register | 标志位寄存器 |
| 0x0F | Control Register | 控制位寄存器 |
STC8H 驱动 RX8025T
接线
P32 -> SCL
P33 -> SDA
GND -> GND
3.3V -> VCC
示例代码
代码下载地址
- GitHub https://github.com/IOsetting/FwLib_STC8/tree/master/demo/i2c/rx8025t
- Gitee https://gitee.com/iosetting/fw-lib_-stc8/tree/master/demo/i2c/rx8025t
代码会将 RX8025T 时间设置为 2022-07-16 10:10:10, 然后每隔一秒显示一次时间, 数值为十六进制
10-10-10-40-16-07-22-01-00-04-00-00-00-00-00-40-
11-10-10-40-16-07-22-01-00-04-00-00-00-00-20-40-
12-10-10-40-16-07-22-01-00-04-00-00-00-00-20-40-
13-10-10-40-16-07-22-01-00-04-00-00-00-00-20-40-
14-10-10-40-16-07-22-01-00-04-00-00-00-00-20-40-
15-10-10-40-16-07-22-01-00-04-00-00-00-00-20-40-
读写时间的方法
__XDATA uint8_t buff[7];
uint8_t RX8025T_Write(uint8_t reg, uint8_t dat)
{
return I2C_Write(RX8025T_I2C_ADDR, reg, &dat, 1);
}
// 初始化, 清除标志位, 关闭中断
uint8_t RX8025T_Init(void)
{
// Reset all flags
RX8025T_Write(RX8025T_REG_FLAG, 0x00);
// Default , turn off all interrupts
RX8025T_Write(RX8025T_REG_CONTROL, 0x40);
return HAL_OK;
}
// 读取时间
uint8_t RX8025T_GetTime(uint8_t *t)
{
I2C_Read(RX8025T_I2C_ADDR, RX8025T_REG_SECOND, t, 16);
return HAL_OK;
}
// 设置时间
uint8_t RX8025T_SetTime(uint8_t *t)
{
RX8025T_Write(RX8025T_REG_SECOND, t[0]);
RX8025T_Write(RX8025T_REG_MINUTE, t[1]);
RX8025T_Write(RX8025T_REG_HOUR, t[2]);
RX8025T_Write(RX8025T_REG_WEEKDAY, t[3]);
RX8025T_Write(RX8025T_REG_DAY, t[4]);
RX8025T_Write(RX8025T_REG_MONTH, t[5]);
RX8025T_Write(RX8025T_REG_YEAR, t[6]);
return HAL_OK;
}
main方法示例
int main(void)
{
uint8_t i;
SYS_SetClock();
// UART1 configuration: baud 115200 with Timer2, 1T mode, no interrupt
UART1_Config8bitUart(UART1_BaudSource_Timer2, HAL_State_ON, 115200);
GPIO_Init();
I2C_Init();
RX8025T_Init();
time[0] = 0x10; // second
time[1] = 0x10; // minute
time[2] = 0x10; // hour
time[3] = 0x40; // week day
time[4] = 0x16; // day
time[5] = 0x07; // month
time[6] = 0x22; // year
RX8025T_SetTime(time);
while(1)
{
RX8025T_GetTime(time);
for (i = 0; i < BUFF_SIZE; i++)
{
UART1_TxHex(time[i]);
UART1_TxChar('-');
}
UART1_TxString("\r\n");
SYS_Delay(1000);
}
}
STC8H开发(十四): I2C驱动RX8025T高精度实时时钟芯片的更多相关文章
- STC8H开发(十三): I2C驱动DS3231高精度实时时钟芯片
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- STC8H开发(十五): GPIO驱动Ci24R1无线模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- STC8H开发(十六): GPIO驱动XL2400无线模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- 基于at91rm9200的i2c分析(DS1307实时时钟芯片)
board-ek.c 构造i2c_board_info结构体 static struct i2c_board_info __initdata ek_i2c_devices[] = { { ...
- STC8H开发(十): SPI驱动Nokia5110 LCD(PCD8544)
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- STC8H开发(十一): GPIO单线驱动多个DS18B20数字温度计
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- python运维开发(十四)----HTML基本操作
内容目录: HTML概述 head标签 body中常用标签 css选择器 css常用属性 HTML HTML概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言) ...
- Java微信公众平台开发(十四)【番外篇】--微信web开发者工具使用
转自:http://www.cuiyongzhi.com/post/58.html 为帮助开发者更方便.更安全地开发和调试基于微信的网页,微信推出了 web 开发者工具.它是一个桌面应用,通过模拟微信 ...
随机推荐
- ucore lab3 虚拟内存管理 学习笔记
做个总结,这节说是讲虚拟内存管理,大部分的时间都在搞SWAP机制和服务于此机制的一些个算法.难度又降了一截. 不过现在我的电脑都16G内存了,能用完一半的情景都极少见了,可能到用到退休都不见得用的上S ...
- 再见 FTP/SFTP!是时候拥抱下一代文件传输利器了!
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 两台电脑之间该如何传送档案,其实方法有超多种的,像是 FTP 或透过 SSH 方式来传送档案, ...
- Docker系列教程03-Docker私有仓库搭建(registry)
简介 仓库(Repository)是集中存放镜像的地方,又分为公共镜像和私有仓库. 当我们执行docker pull xxx的时候,它实际上是从registry.docker.com这个地址去查找,这 ...
- C++进阶-1-模板基础(函数模板、类模板)
C++进阶 模板 1.1 函数模板 1 #include<iostream> 2 using namespace std; 3 4 // 模板 5 6 // 模板的简单实例 7 // 要求 ...
- JS 一些概念
JS 内存机制 基本类型: String | Boolean | Undefined | Number | Nll | Symbol 数据保存在"栈"--先进后出. 数据类型: A ...
- python之函数的进阶
1.名称空间: 定义:用来存放名字的(变量,函数名,类名,引入的模块名) 分类: 内置名称空间:python解释器提供好的一些内置内容 全局名称空间:py文件中自己写的变量 局部名称空间:执行函数时会 ...
- mybatis 查询返回的类型中字段类型为 List<xx>
基本类型数组 mapper.xml <resultMap id="xxDtoResultMap" type="com.xx.xxDto"> < ...
- AngularJS搭建环境
一.搭建环境 1.1 调试工具:batarang Chrome浏览器插件 主要功能:查看作用域.输出高度信息.性能监控 1.2 依赖软件:Node.js 下载:https://nodejs.org/e ...
- 561. Array Partition I - LeetCode
Question 561. Array Partition I Solution 题目大意是,给的数组大小是2n,把数组分成n组,每组2个元素,每个组取最小值,这样就能得到n个值,怎样分组才能使这n个 ...
- elasticsearch-spark的用法
Hadoop允许Elasticsearch在Spark中以两种方式使用:通过自2.1以来的原生RDD支持,或者通过自2.0以来的Map/Reduce桥接器.从5.0版本开始,elasticsearch ...