[RTT&瑞萨高性能 CPK-RA6M4] 7、RT-Thread之RTC评测
<div class='showpostmsg'><p>一、硬件部分</p><p>RTC (Real-Time Clock)是内部实时时钟,基本不涉及外部管脚,可以提供精确的实时时间,用于产生年、月、日、时、分、秒等信息。实时时钟芯片大多采用精度较高的晶体振荡器作为时钟源。</p>
<p>由于信息输出的需要,还是采用串口输出的方式,打印信息,因此用到了usart7作为调试信息的输出,涉及的管脚为P613和P614.</p>
<p> 二、软件部分</p>
<p>1、新建项目</p>
<p>基于开发板进行新建项目,选择模板工程,生成后直接打开项目</p>
<p> </p>
<p>2、FSP配置</p>
<p>新项目在使用RA Smart Configurator时,需要指定安装路径。然后打开RA Smart Configurator,在new stack中增加RTC</p>
<p> </p>
<p> 检查一下g_usart7的管脚P613和P614,然后点击右上角的Generate Project Content,生成配置。比较遗憾的是,每次RA Smart Configurator生成后,都需要手动复制board_cfg.h头文件。</p>
<p>3、RT Thread Settungs中设置</p>
<p>打开RT-Thread Setting,配置RTC相关的信息,图形界面中右键配置RTC,然后在组件选项中使能RTC</p>
<p></p>
<p>在硬件选项中同样使能RTC</p>
<p> Ctrl-S保存后更新配置信息</p>
<p>4、代码说明</p>
<p>在RT-Thread网站中,可以找到RTC相关的示例</p>
<p> 适当修改后,新建rtc.c文件,放在src目录下</p>
<pre>
<code>#include <rtthread.h>
#include <rtdevice.h>
#include <time.h>
static int set_datetime(int argc, char *argv[])
{
rt_err_t ret = RT_EOK;
//time_t now;
if(argc != 6) {
rt_kprintf("Usage:set_datetime 2022 06 18 21 57 00 \r\n");
}
/* 设置日期 */
ret = set_date(atoi(argv), atoi(argv), atoi(argv));
if (ret != RT_EOK)
{
rt_kprintf("set RTC date failed\n");
return ret;
}
/* 设置时间 */
ret = set_time(atoi(argv), atoi(argv), atoi(argv));
if (ret != RT_EOK)
{
rt_kprintf("set RTC time failed\n");
return ret;
}
/* 延时3秒 */
//rt_thread_mdelay(3000);
/* 获取时间 */
//now = time(RT_NULL);
//rt_kprintf("%s\n", ctime(&now));
return ret;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(set_datetime, rtc sample);</code></pre>
<p>用于设定初始时间,使用方式为命令行输入set_datetime 2022 06 18 21 57 00</p>
<p>为了及时更新时间,在hal_entry.c中修改hal_entry函数</p>
<pre>
<code>void hal_entry(void)
{
time_t now;
rt_kprintf("\nHello RT-Thread!\n");
while (1)
{
rt_pin_write(LED3_PIN, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED3_PIN, PIN_LOW);
rt_thread_mdelay(500);
/* 获取时间 */
now = time(RT_NULL);
rt_kprintf("%s\n", ctime(&now));
}
}</code></pre>
<p>编译后下载至开发板,开启串口软件sscom</p>
<p>5、演示效果</p>
<p>复位开发板后在sscom中显示信息</p>
<p> 设置初始时间后,每间隔1秒打印当前时间</p>
<p>三、心得体会</p>
<p>对于RTT支持的设备来说,实现功能确实非常方便,甚至可以不写代码实现,非常方便和快捷,但是对于不直接支持的设备,还是比较麻烦的。RTC显然属于支持的设备,因此非常方便。</p>
<p>期待RTT加入更多的硬件支持和更多的设备支持!</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>谢谢分享,期待后续!</p>
<p>教程写的不错!</p>
<p>谢谢分享,很有参考价值,mark一下,期待后续教程。。。</p>
页:
[1]