STM32的实时时钟RTC编程详解

2023-07-27

STM32的RTC实时时间问题

char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep); /*取得当地时间粗颂陆*/

把这个加到RTC初始化下配置时间里面试试

printf ("%d%d%d ", (1900+p->tm_year),( 1+p->tm_mon), p->tm_mday);
printf("%s%d:%d:%d\n", wday[p->tm_wday],p->tm_hour, p->tm_min, p->tm_sec);
把这个放到RTC秒中断的服务樱配函数里岩顷面试试
我也不会 不知道能不能给你点提示 ~ ~

s

一、关于时间
  2038年问题

  在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作。所有使用UNIX时间表示时间的程序都将将受其影响,因为它们以自1970年来自1月1日经过的秒数(忽略闰秒)来表示时间。这种时间表示法在类Unix(Unix-like)操作系统上是一个标准,并会影响值开输够从程致娘以其C编程语言开发给其他大部份操作系统使360问答用的软件。

  在大部份的32位操作系统上,此“time_t”数据模式使用一个有正负号的32位元整数(signedint32)存储计算的秒数。也就是说最大可以计数的秒数为 2^31次方 可以算得:

2^31/3600/24/365 ≈ 68
  所以依照此“time_t”标准,在此格式能被表示的最后时间是2038年1月19日03:14:07,星期力口械节汽察二(UTC)。超过此一瞬间,时间将会被掩盖(wrap around)且在内部被表示为一个负数,并造成程序无法工作,因为它们无法将此时间识别为2038功口液握液甚群换限夜的年,而可能会依个别实作而跳回1970年或1901年。
  对于PC机来说,时间开始于1980年1月1日,并以无正负符号的32位整数的形式按秒递增,这与UNIX时间非常类似。可以算得:
2^32/3600/24/365 ≈ 136年
  到2116年再这宣袁氢,这个整数将溢出。
  
  Windows NT使用64位整数来计时。但是,它使用100纳秒作为增量单位,且时间开始于1601年1月1日,主示山福所以NT将遇到2184年问题。
  苹果公司声明,Mac在29,940年之前不会出现时间问题!

STM32 RTC时钟问题

你用RTC做一个标准的秒中断就可以,我觉得还需要用一个寄存器把你的时间存起来,如果需要掉电也保持数据的话推荐使用bkp寄存器,然后在秒中断中改变bkp寄存器的值,再通过串口显示出来就可以了。我就用RTC和BKP加液晶做了一个电子钟。如果需要程序你给我留个邮箱我给你发去例程,不过发例程就需要加分了。。。。思路大概都有了,我觉得你应该能够自己做出来。

文章推荐

相关推荐