NUCLEO_G431RB测评-RTC实时时钟
<div class='showpostmsg'><p>实时时钟(RTC)是独立于主功能外的一个模块,用做与日历时间有关的计时功能。过去有专门的芯片如:DS1302。现在由于芯片的集成度工艺的提高,很多MCU芯片厂商将时钟芯片集成到一个芯片当中。使得设计大大简化了。但是原则上RTC是一个外置的模块,MCU的活动不影响RTC的功能。如果需要RTC模块可以使用独立的电池供电,来保证时间的连续性。</p><p>这是我从STM32G431手册上摘录的RTC功能:</p>
<ul>
<li>具有BCD(二进制编码的十进制)格式的亚秒,秒,分钟,小时(12或24格式),星期,日期,月份,年份的日历。</li>
<li>自动更正每月的28、29(闰年),30和31天。</li>
<li>两个可编程警报器。</li>
<li>从1到32767 RTC时钟脉冲进行实时校正。这可用于将其与主时钟同步。</li>
<li>参考时钟检测:可以使用更精确的第二个源时钟(50或60 Hz)来提高日历精度。</li>
<li>具有0.95 ppm分辨率的数字校准电路,以补偿石英晶体的误差。</li>
<li>时间戳功能,可用于保存日历内容。可捕获时间戳引脚上的事件,篡改事件或切换VBAT模式触发事件。</li>
<li>17位自动重载唤醒定时器(WUT),用于具有可编程分辨率和周期性事件。 RTC供电切换开关,该开关可以控制VDD电源或VBAT引脚供电。</li>
</ul>
<p>RTC的时钟源可以是: (1)32.768 kHz外部晶体(LSE);(2)外部谐振器或振荡器(LSE) ;(3)内部低功耗RC振荡器(LSI,典型频率为32 kHz);(4)高速外部时钟(HSE)32分频。</p>
<p>RTC由LSE计时时,在VBAT模式和所有低功耗模式下均可用。当使用LSI时钟时,RTC在VBAT模式下不起作用,但在除关机模式外的所有低功耗模式下都起作用。所有RTC事件(警报,唤醒定时器,时间戳)都可以生成中断并将设备从低功耗模式唤醒。<br />
对以上主要内容做个介绍:</p>
<p>根据以往的经验,RTC模块的计时还是比较准确的,工作也较为稳定。但是该模块相较DS1302还是比较费电的。有时CR1220的电池用不了一年就没电了(不知道是不是我的电池问题还是我的电路设计或是运行环境的事?)。<span style="color:#e74c3c;">需要主意的是:RTC的时钟一定要选对了,如果你选择了内部时钟计数器,时钟的误差就会很大!</span></p>
<p>RTC的模块中除了有计时功能外,还有一块RAM,叫做:备份寄存器。这个RAM可以使用电池供电,常常用来保存一些需要掉电保持的数据。如机器的运行状态什么的,因为是RAM所以读写次数不限,只要电池有电。可以代替有擦写次数限制的EEPROM。这一区域是独立于主MCU功能的,所以不能直接使用地址来访问。需要RTC的操作寄存器来访问。</p>
<p><strong>入侵检测:</strong>RTC模块设有专用的引脚,只要这个引脚出现电平变化,就会擦除备份寄存器中的数据。这个功能可以用防止恶意的拆机等应用。</p>
<p>本次测试还是使用的STM32Cube,首先设置RTC功能使能。注意时钟设置为外部32.768K晶振。</p>
<p>然后激活日历功能。</p>
<p></p>
<pre>
<code>HAL_RTC_GetTime(&hrtc, &stimestructure, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &sdatestructure, RTC_FORMAT_BIN);
printf("%02d/%02d/%02d\r\n",2000 + sdatestructure.Year, sdatestructure.Month, sdatestructure.Date);
printf("%02d:%02d:%02d\r\n",stimestructure.Hours, stimestructure.Minutes, stimestructure.Seconds);</code></pre>
<p>使用HAL_RTC_GetTime和HAL_RTC_GetDate函数读取RTC的计时和日历。HAL_RTC_SetDate和HAL_RTC_SetTime设置初始的时间。到此你的时钟就可以使用了。</p>
<p></p>
<p><br />
<br />
<b><font color="#5e7384">此</font></b></p>
<p><b><font color="#5e7384">内容由EEWORLD论坛网友<font size="3">bigbat</font>原创,如需转载或用于商业用途需征得作者同意并注明出处</font></b><br />
</p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>G系列功耗和L系列比呢</p>
页:
[1]