本帖最后由 jeffwei 于 2019-8-2 15:21 编辑
环境是STM32F767正点原子的核心板,RTC电池3.1V,RTC版本3.03,开发软件IAR 8.40.1wenti
问题现象是上电或复位后第一次调用set_time或set_date函数能正常设置一次,后面再设置日期或
时间都会增加几个到十几个小时,不是夏时令或时区导致的问题,调试发现要么mktime函数有问题,
要么RTC硬件有问题,mktime写入时间再读出的话就发现不正常。有谁遇到过这种问题没?
rt_err_t set_time(rt_uint32_t hour, rt_uint32_t minute, rt_uint32_t second)
{
time_t now;
struct tm *p_tm;
struct tm tm_new;
rt_device_t device;
rt_err_t ret = -RT_ERROR;
/* get current time */
now = time(RT_NULL);
/* lock scheduler. */
rt_enter_critical();
/* converts calendar time time into local time. */
p_tm = localtime(&now);
//p_tm = gmtime(&now);
/* copy the statically located variable */
memcpy(&tm_new, p_tm, sizeof(struct tm));
/* update time. */
tm_new.tm_hour = hour;
tm_new.tm_min = minute;
tm_new.tm_sec = second;
// tm_new.tm_isdst = -1;
/* converts the local time in time to calendar time. */
now = mktime(&tm_new);
device = rt_device_find("rtc");
if (device == RT_NULL)
{
return -RT_ERROR;
}
/* update to RTC device. */
ret = rt_device_control(device, RT_DEVICE_CTRL_RTC_SET_TIME, &now);
/* unlock scheduler. */
rt_exit_critical();
return ret;
}
------------------------------------------------------------------------------------------------------------------------------换STM32Cube_FW_F7_V1.15.0和对应CMSIS后能设置时间了,就是改日期的话,会自动少一个小时。
查看更多