kit7828 发表于 2022-6-19 18:44

[RTT&瑞萨高性能 CPK-RA6M4] 7、RT-Thread之RTC评测

<div class='showpostmsg'><p>一、硬件部分</p>

<p>RTC (Real-Time Clock)是内部实时时钟,基本不涉及外部管脚,可以提供精确的实时时间,用于产生年、月、日、时、分、秒等信息。实时时钟芯片大多采用精度较高的晶体振荡器作为时钟源。</p>

<p>由于信息输出的需要,还是采用串口输出的方式,打印信息,因此用到了usart7作为调试信息的输出,涉及的管脚为P613和P614.</p>

<p>&nbsp;二、软件部分</p>

<p>1、新建项目</p>

<p>基于开发板进行新建项目,选择模板工程,生成后直接打开项目</p>

<p> &nbsp;</p>

<p>2、FSP配置</p>

<p>新项目在使用RA Smart Configurator时,需要指定安装路径。然后打开RA Smart Configurator,在new stack中增加RTC</p>

<p> &nbsp;</p>

<p>&nbsp;检查一下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> &nbsp;&nbsp;Ctrl-S保存后更新配置信息</p>

<p>4、代码说明</p>

<p>在RT-Thread网站中,可以找到RTC相关的示例</p>

<p>&nbsp;适当修改后,新建rtc.c文件,放在src目录下</p>

<pre>
<code>#include &lt;rtthread.h&gt;
#include &lt;rtdevice.h&gt;
#include &lt;time.h&gt;
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(&amp;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(&amp;now));

    }

}</code></pre>

<p>编译后下载至开发板,开启串口软件sscom</p>

<p>5、演示效果</p>

<p>复位开发板后在sscom中显示信息</p>

<p>&nbsp;设置初始时间后,每间隔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>

freebsder 发表于 2022-6-20 20:22

<p>谢谢分享,期待后续!</p>

wangerxian 发表于 2022-6-21 10:05

<p>教程写的不错!</p>

beiyunhe 发表于 2022-6-21 23:03

<p>谢谢分享,很有参考价值,mark一下,期待后续教程。。。</p>
页: [1]
查看完整版本: [RTT&瑞萨高性能 CPK-RA6M4] 7、RT-Thread之RTC评测