基于STM32单片机秒中断源和闹钟中断源的解决方案.doc
《基于STM32单片机秒中断源和闹钟中断源的解决方案.doc》由会员分享,可在线阅读,更多相关《基于STM32单片机秒中断源和闹钟中断源的解决方案.doc(3页珍藏版)》请在三一文库上搜索。
1、基于STM32单片机秒中断源和闹钟中断源的解决方案“RTC”是Real Time Clock 的简称,意为实时时钟。STM32提供了一个秒中断源和一个闹钟中断源。RTC的技术器是一个32位的计数器,使用32.768khz的外部晶振。2038年问题在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作。所有使用UNIX时间表示时间的程序都将受其影响,因为它们以自1970年1月1日经过的秒数(忽略闰秒)来表示时间。这种时间表示法在类Unix(Unix-like)操作系统上是一个标准,并会影响以其C编程语言开发给其他大部份操作系统使用的软件。在大部份的32位操作系统上,此“TIme
2、_t”数据模式使用一个有正负号的32位元整数(signedint32)存储计算的秒数。也就是说最大可以计数的秒数为 2次方 可以算得:2/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 /
3、3600/24/365 136年到2116年,这个整数将溢出。Windows NT使用64位整数来计时。但是,它使用100纳秒作为增量单位,且时间开始于1601年1月1日,所以NT将遇到2184年问题。苹果公司声明,Mac在29,940年之前不会出现时间问题!由于RTC是一个32位计数器,同样其计时时间是有限的。库函数中使用到了C标准时间库,时间库中的计时起始时间是1900年,可以知道时间库中不是用 有符号位的32位整数来表示时间的,否则在1968年就已经溢出了。如果用32位无符号整数计时,其溢出时间为2036年左右,所以会遇到这个问题。直接操作寄存器中,可以自由设定这个时间戳起始的年份,RT
4、C的32位寄存器存储的只是距离这个起始年份的总秒数,所以不会遇到这个问题。而且可以用无符号32位的二进制表示时间,这意味着此类系统的时间戳可以表示更多的秒数。但是由于其使用32位寄存器表示秒数,最大只能计时到136年后。本例实现使用STM32每秒输出一次当前的时间,并设置一个闹钟,到时间时输出提醒信息。直接操作寄存器RTC实时时钟的操作原则是 在每次读写前都要保证上一次读写完成。代码较多,使用到的寄存器请参见手册 (system.h 和stm32f10x_it.h等相关代码参照STM32 直接操作寄存器开发环境配置)User/main.c#include#include“system.h”#i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 STM32 单片机 中断 闹钟 解决方案
链接地址:https://www.31doc.com/p-3412120.html