外观
HYM8563 RTC 示例
2025-10-29
本文将详细介绍通过 I2C 总线访问 HYM8563 RTC 设备并读取时间信息的方法,帮助读者掌握 I2C 总线的设备通信操作和 RTC 时间信息(年月日、时分秒、星期)的读取技能。
HYM8563 RTC
HYM8563 是一款实时时钟芯片,通过 I2C 接口提供精确的年、月、日、时、分、秒计时以及星期显示,支持闰年自动调整。支持分钟、小时、日级别的闹钟触发及中断输出,内置 8 位倒计数器实现可编程定时功能,具备掉电检测和电池供电切换机制,主电源中断时仍能维持计时。
读取 HYM8563 RTC 设备的实时时钟
本示例展示如何通过 I2C 总线访问 HYM8563 RTC 设备,并读取其年月日、时分秒和星期时间信息。
硬件连接
开发板的 I2C 与 RTC 硬件已经连接,RTC 芯片位置如图所示:

查手册获取 RTC 的设备地址
根据 HYM8563 数据手册可知:
写地址:
0xA2读地址:
0xA3
即 I2C 从地址为 0x51(7 位地址):

创建工程点击展开
依次点击 “文件” -> “新建” -> "RT-Thread RuiChing App 项目"。

在弹出新建向导中选择 开发版 、BSP: 、示例 、 调试器/下载器。选择好之后点击 “完成”。

点击 “完成” 后,等待工程创建完成。

创建完成。

构建工程点击展开
单击工程使工程进入 Active-Debug 模式。

点击工具栏上的构建按钮进行工程编译。

构建成功后,会显示构建成功的信息。

固件下载点击展开
固化设备树

固化 APP

核心示例代码
at24c32.c
static rt_err_t hym8563s_write_reg(
struct rt_i2c_bus_device *bus, rt_uint8_t reg, rt_uint8_t data)
{
rt_uint8_t buf[2] = { 0 };
struct rt_i2c_msg msg;
buf[0] = reg;
buf[1] = data;
msg.addr = HYM8563S_BASE;
msg.flags = RT_I2C_WR;
msg.buf = buf;
msg.len = 2;
if (rt_i2c_transfer(bus, &msg, 1) == 1)
{
return RT_EOK;
}
return (-RT_ERROR);
}
static rt_err_t hym8563s_read_reg(struct rt_i2c_bus_device *bus,
rt_uint8_t reg,
rt_uint8_t len,
rt_uint8_t *buf)
{
struct rt_i2c_msg msg[2] = { 0 };
msg[0].addr = HYM8563S_BASE;
msg[0].flags = RT_I2C_WR;
msg[0].len = 1;
msg[0].buf = ®
msg[1].addr = HYM8563S_BASE;
msg[1].flags = RT_I2C_RD;
msg[1].len = len;
msg[1].buf = buf;
if (rt_i2c_transfer(bus, msg, 2) == 2)
{
return RT_EOK;
}
return (-RT_ERROR);
}
static void i2c_example(void)
{
rt_uint8_t rx_buff[7] = { 0 };
rt_uint8_t count = 10;
i2c = rt_i2c_bus_device_find("i2c0");
if (i2c == RT_NULL)
{
LOG_E("i2c0 not found!");
return;
}
hym8563s_write_reg(i2c, 0x01, 0xA);
hym8563s_write_reg(i2c, 0x02, 0x56); /* set second */
hym8563s_write_reg(i2c, 0x03, 0x59); /* set minute */
hym8563s_write_reg(i2c, 0x04, 0x23); /* set hour */
hym8563s_write_reg(i2c, 0x05, 0x31); /* set day */
hym8563s_write_reg(i2c, 0x07, 0x12); /* set mouth */
hym8563s_write_reg(i2c, 0x08, 0x25); /* set year */
hym8563s_write_reg(i2c, 0x06, 0x1); /* set week */
hym8563s_write_reg(i2c, 0x01, 0xA);
while (count--)
{
hym8563s_read_reg(i2c, 0x02, 7, rx_buff); /* read time */
LOG_I("20%02x--%02x--%02x %02x : %02x : %02x week: %02x", rx_buff[6],
rx_buff[5] & 0x1f, rx_buff[3] & 0x3f, rx_buff[2] & 0x3f,
rx_buff[1] & 0x7f, rx_buff[0] & 0x7f, rx_buff[4] & 0x07);
rt_thread_mdelay(1000);
}
}运行程序
开发板运行程序后,在终端输入 i2c_example 命令, 系统将执行以下操作:
设置 RTC 时间为 2025-12-31 23:59:56
连续读取当前时间并每秒打印一次,共 10 次
验证 RTC 芯片的基本通信及时钟进位正常。
msh />i2c_example
[I/example.i2c] 2025--12--31 23 : 59 : 56 week: 01
[I/example.i2c] 2025--12--31 23 : 59 : 57 week: 01
[I/example.i2c] 2025--12--31 23 : 59 : 58 week: 01
[I/example.i2c] 2025--12--31 23 : 59 : 59 week: 01
[I/example.i2c] 2026--01--01 00 : 00 : 00 week: 02
[I/example.i2c] 2026--01--01 00 : 00 : 01 week: 02
[I/example.i2c] 2026--01--01 00 : 00 : 02 week: 02
[I/example.i2c] 2026--01--01 00 : 00 : 03 week: 02
[I/example.i2c] 2026--01--01 00 : 00 : 04 week: 02
[I/example.i2c] 2026--01--01 00 : 00 : 05 week: 02