1. 测试了外部高精度RTC(PCF85063)的驱动,时钟功能正常,测试通过
This commit is contained in:
@@ -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)); // 每秒读一次
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user