F4的RTC设置日期时是不是写入很慢?

2019-07-20 07:59发布

如题,F4的RTC设置时间和设置日期是用两个函数实现的,操作设置日期时明显感觉同步的时间比较长,大约4、5秒的样子。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
三叶草
1楼-- · 2019-07-20 08:29
应该不会的吧
正点原子
2楼-- · 2019-07-20 11:46
 精彩回答 2  元偷偷看……
solo
3楼-- · 2019-07-20 16:16

回复【3楼】正点原子:
---------------------------------

RTC的初始化是跟板子的历程里一样的。


 case 5://【ok】写入STM32 RTC
{
s8 w;//计算中可能产生负值
u8 c,y,m,d;//计算星期使用

//蔡勒公式计算某年某月某日的星期
c = 21-1;//世纪,2001~2100为21世纪
y = t_box[0].dat;//年
m = t_box[1].dat;//月,3~14
d = t_box[2].dat;//日

if(m < 3)//如果是1、2,要看做去年的13、14月来计算
{
y -= 1;
m += 12;
}

w = y+(u8)(y/4)+(u8)(c/4)-2*c+(u8)(26*(m+1)/10)+d-1;
if(w < 0) w = w%7+7;//当出现负值时取模运算
else w %= 7;
if(w == 0) w = 7;

xSemaphoreTake(xQueueHandle_RTC, 0xffffffff);

RTC_DateStructure.RTC_Year    = t_box[0].dat;//1970-2106
RTC_DateStructure.RTC_Month   = t_box[1].dat;//0-11
RTC_DateStructure.RTC_Date    = t_box[2].dat;//(1:1-31)(2:1-28)(3:1-31)(4:1-30)(5:1-31)(6:1-30)(7:1-31)(8:1-31)(9:1-30)(10:1-31)(11:1-30)(12:1-31)
RTC_DateStructure.RTC_WeekDay = w;//1~7
RTC_SetDate(RTC_Format_BIN, &RTC_DateStructure);

RTC_TimeStructure.RTC_Hours   = t_box[3].dat;//0-23
RTC_TimeStructure.RTC_Minutes = t_box[4].dat;//0-59
RTC_TimeStructure.RTC_Seconds = t_box[5].dat;//0-59
RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure);

xSemaphoreGive(xQueueHandle_RTC);

printf("星期%d ",w);
                
return;
}//break;

1、在里面计算了星期;2、有多线程信号量保护。
问题:时间和日期是同时写入的,但是奇怪的是如果我只修改了时间生效速度没问题;如果我修改了日期和时间,时间立刻生效,日期有相当大的延迟(4~5s)。如果屏蔽星期的计算了信号量的保护,结果和现在没有区别。

solo
4楼-- · 2019-07-20 16:21
还有STM的RTC时钟的精度一直都调的不满意,2~3天时间快1分钟左右。STM的RTC时钟精度到底你能打到什么程度?不行的话只能用外部的时钟芯片了。(32.786khz晶振已接地)
styleno1
5楼-- · 2019-07-20 21:55
 精彩回答 2  元偷偷看……
solo
6楼-- · 2019-07-20 23:33
回复【6楼】styleno1:
---------------------------------
校准知道有两种方法:
1、定时器自动校准,暂没测试
2、手动校准,批量不现实
对于晶振问题,已经打算换有源晶振,然后再结合定时器自动校准,不知可否达到预期效果。

一周热门 更多>