2019-07-20 07:59发布
回复【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)。如果屏蔽星期的计算了信号量的保护,结果和现在没有区别。
最多设置5个标签!
回复【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)。如果屏蔽星期的计算了信号量的保护,结果和现在没有区别。
---------------------------------
校准知道有两种方法:
1、定时器自动校准,暂没测试
2、手动校准,批量不现实
对于晶振问题,已经打算换有源晶振,然后再结合定时器自动校准,不知可否达到预期效果。
一周热门 更多>