RTC

复位后第二次设定时间会出错

发布于 2019-08-01 15:26:43
    本帖最后由 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后能设置时间了,就是改日期的话,会自动少一个小时。

查看更多

关注者
0
被浏览
502
3 个回答
flyboy
flyboy 2019-08-01
bsp 是自己移植的还是官方提供的呢,如果是官方提供的话,可以说一下是哪一个具体的bsp吗
jeffwei
jeffwei 2019-08-02
flyboy 发表于 2019-8-1 17:49
bsp 是自己移植的还是官方提供的呢,如果是官方提供的话,可以说一下是哪一个具体的bsp吗 ...


BSP自己的,好像正点原子在和RTT合作,不知道官方有无出BSP。我现在不是全职做嵌入式研发,做集成的事情更多,跟不上节奏,将就3.0.3,没上v4.
flyboy
flyboy 2019-08-02
有的,楼主可以看一下这个

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览