有读者问:如何在STM32F1上实现日历功能?
一、关于RTC
RTC:Real TimeClock,实时时钟,记录当前时间的计算机时钟。
RTC 不仅应用于个人计算机、服务器和嵌入式系统,几乎所有需要准确计时的电子设备也都会使用。
支持 RTC 的微控制器可用于精密计时器、闹钟、手表、小型电子记事薄以及其它多种设备。
在实际项目中,运用时间戳的地方很多,比如:存储数据、日志消息、系统故障等。
二、STM32的RTC
在所有STM32处理器中,都集成了一个RTC模块,是一个独立的 BCD 定时器 / 计数器。
但是,在STM32F1系列中,RTC模块的功能相对比较简单(也许是最前推出的原因)。其中,一个重要的功能,日历功能在F1系列中是不具备的。
F1的RTC可以实现1秒累计计数,很早之前,我自己通过软件实现日历功能,其中包含闰年、月份28、29天的处理。我之前进行过多次验证,但也不敢保证完全没问题。
RTC功能概述:
处理STM32F1,其它系列的RTC基本具有很多高级功能,比如:日历、闹钟、定时唤醒单元、数字校准、同步、时间戳和高级入侵检测等。
三、日历功能
RTC最重要,最常用的功能就是日历功能,但F1系列中的RTC模块不具备。
打开F1手册,你在RTC框图,你会发现没有日历(Calendar)相关的寄存器。而且其他系列就有:
除F1系列,可轻松配置和显示下列日历数据字段:
·含有下列字段的日历:
– 亚秒 (不可编程)
– 秒
– 分
– 时 ( 12 小时或 24 小时格式)
– 星期
– 日
– 月
– 年
·二进码十进数 ( BCD)格式的日历
·自动管理天数为 28、 29 (闰年)、 30 和 31 的月份
·夏令时调整可用软件编程
四、闹钟功能
相对F1系列,其他系列的闹钟功能自然也更高级了。STM32闹钟基于日历基础之上,只需简单简单编程即可实现闹钟功能。
闹钟单元均具有以下功能:
·支持对闹钟自由编程:亚秒 (稍后讨论)、秒、分钟、小时和日期字段可以单独选择或屏蔽,以实现多种闹钟组合。
·能够在发生闹钟事件时使器件退出低功耗模式。
·可将闹钟事件发送到极性可配置的特定输出引脚。
·具有专用的闹钟标志和中断。
五、其他
RTC功能还有很多重要功能,这里只简单说了常用、重要的日历和闹钟。更多RTC知识可参看MCU对应的参考手册。
最后,标题中“不建议用STM32F1的RTC实现日历功能”,就是因为F1不具备RTC功能,软件实现复杂,同时也不具备一些高级功能。
额外:RTC属于一个计时器,也可实现定时器的一些基本功能。
相关文章