1. 测试了外部高精度RTC(PCF85063)的驱动,时钟功能正常,测试通过

This commit is contained in:
Misaki
2025-08-24 18:45:38 +08:00
parent 439a379945
commit 761b7b0bc5
6 changed files with 72 additions and 2 deletions
+59
View File
@@ -133,4 +133,63 @@ void sd_card_module_test(void)
}
printf("\n=== SD卡模块测试完成 ===\n");
}
#include "PCF85063.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
static const char *TAG = "PCF85063_TEST";
void pcf85063_test(void)
{
/* 1. 初始化 I2C 与 PCF85063 */
I2C_Init(); // 初始化 ESP32 I2C 外设
PCF85063_Init(); // 配置 PCF85063 进入 24h 模式、RTC 启动
ESP_LOGI(TAG, "PCF85063 初始化完成");
/* 2. 设置当前系统时间(示例:2025-08-24 周日 14:30:00*/
datetime_t set_time = {
.year = 2025,
.month = 8,
.day = 24,
.dotw = 0, // 0 表示星期日
.hour = 14,
.minute = 30,
.second = 0
};
PCF85063_Set_All(set_time);
ESP_LOGI(TAG, "已设置时间:2025-08-24 14:30:00");
/* 3. 设置闹钟(示例:14:31:15 触发一次)*/
datetime_t alarm_time = {
.hour = 14,
.minute = 31,
.second = 15,
/* 日/星期字段无需关心,已在 PCF85063_Set_Alarm 中屏蔽 */
};
PCF85063_Set_Alarm(alarm_time);
PCF85063_Enable_Alarm(); // 使能闹钟中断并清除 AF 标志
ESP_LOGI(TAG, "已设置闹钟:14:31:15");
/* 4. 周期性读取时间与检查闹钟标志位 */
char str_buf[64];
while (true)
{
/* 4.1 读取当前时间 */
datetime_t now;
PCF85063_Read_Time(&now);
datetime_to_str(str_buf, now);
ESP_LOGI(TAG, "当前时间:%s", str_buf);
/* 4.2 检查闹钟标志位 */
uint8_t flag = PCF85063_Get_Alarm_Flag();
if (flag & RTC_CTRL_2_AF)
{
ESP_LOGI(TAG, "闹钟触发!AF=1");
/* 如需重复闹钟,可在此重新设置新时间或清除 AF 后再次使能 */
PCF85063_Enable_Alarm(); // 清除 AF 并重新使能
}
vTaskDelay(pdMS_TO_TICKS(1000)); // 每秒读一次
}
}