RT Thread Studio创建软件和硬件RTC工程

MCU型号:STM32F103RET6

一.配置软件模拟RTC

1.生成一个带串口输出的工程文件,新建RT-Thread项目工程文件。

2.查看电路图中的串口输出管脚,根据STMCubeMx软件可知此串口为USART1,选择芯片型号为STM32F103RET6,控制台串口选择UART1,发送脚:PB6,接收脚:PB7

3.设置下载bin文件的下载地址为:0x08000000。

4.代码编译后下载到电路板,连上串口调试助手可看到调试信息。

5.打开RT-Thread Settings设置设备驱动中的软件模拟RTC,RTC设置如图所示,设置完成之后,记得保存,否则设置无效。

实际上是将soft_rtc.c文件添加到工程中编译,并将宏定义RT_USING_SOFT_RTC打开。

6.增加rtc的初始化代码rtc_app.h和rtc_app_c,以及修改main函数中的代码。

rtc_app.h

c 复制代码
#ifndef APPLICATIONS_RTC_APP_H_
#define APPLICATIONS_RTC_APP_H_

int rtc_init(void);

#endif /* APPLICATIONS_RTC_APP_H_ */

rtc_app.c

c 复制代码
#include <rtthread.h>
#include <rtdevice.h>

#define RTC_NAME       "rtc"

#define DBG_TAG "rtc"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>

int rtc_init(void)
{
    rt_err_t ret = RT_EOK;
    rt_device_t device = RT_NULL;

    /*寻找设备*/
    device = rt_device_find(RTC_NAME);
    if (!device)
    {
        LOG_E("find %s failed!", RTC_NAME);
        return RT_ERROR;
    }

    /*初始化RTC设备*/
    if(rt_device_open(device, 0) != RT_EOK)
    {
        LOG_E("open %s failed!", RTC_NAME);
        return RT_ERROR;
    }
    ret = set_date(2025, 5, 6);
    if (ret != RT_EOK)
    {
        rt_kprintf("set RTC date failed\n");
        return ret;
    }

    /* 设置时间 */
    ret = set_time(9, 15, 50);
    if (ret != RT_EOK)
    {
        rt_kprintf("set RTC time failed\n");
        return ret;
    }
    return ret;
}

main.c

c 复制代码
#include <rtthread.h>

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
 
#include <rtdevice.h>
extern int rtc_init(void);
 
int main(void)
{
    int count = 1;
    time_t now;
    rtc_init();
 
    while (count++)
    {
        /* 延时3秒 */
        rt_thread_mdelay(3000);
 
        /* 获取时间 */
        now = time(RT_NULL);
        rt_kprintf("%s\n", ctime(&now));
//        LOG_D("Hello RT-Thread!");
//        rt_thread_mdelay(1000);
    }
 
    return RT_EOK;
}

7.由于RT Thread stdio创建工程的时候使用的是内部晶振,所以需要将其修改为外部晶振,查看原理图的外部晶振大小。

8.打开CubeMx_Settings配置外部晶振,配置sys。




生成工程后查看drv_clk.c文件可查看到clk_init函数内容已做修改。

9.将stmf1xx_hal_conf.h中的HAL_UART_MODULE_ENABLED,HAL_USART_MODULE_ENABLED宏定义打开。

10.编译程序,烧录到芯片中,查看串口日志,可查看到间隔3秒变化一次rtc时间。

二.配置硬件RTC

1.接上面的工程例子,取消勾选软件模拟RTC选项

2.在board.h中开启BSP_USING_ONCHIP_RTC宏定义,由于电路图中没有LSE晶振,故这里使用LSI内部晶振,开启BSP_RTC_USING_LSI宏定义。

3.由于drv_rtc.c文件中的rt_hw_rtc_register()函数和rtc.c中的rt_hw_rtc_register()函数存在冲突,所以需要删除掉rtc.h和rtc.c文件中的rt_hw_rtc_register()函数。

4.配置硬件RTC,打开CubeMX_Settings配置RTC

5.由于重新配置了CubeMx,所以需要重新打开宏定义HAL_UART_MODULE_ENABLED和HAL_USART_MODULE_ENABLED

6.编译后烧录到电路板中,会出现"RTC hasn't been configured, please use command to config.",是因为未设置时间,可以调用set_rtc_time_stamp(time_t time_stamp)函数设置。


相关推荐
小白|18 小时前
CANN与实时音视频AI:构建低延迟智能通信系统的全栈实践
人工智能·实时音视频
我真会写代码2 天前
WebSocket:告别轮询,实现Web实时通信 WebRTC:无需插件,实现浏览器端实时音视频通信
网络·websocket·网络协议·webrtc·实时音视频
TSINGSEE3 天前
国标GB28181视频质量诊断:EasyGBS服务插件EasyVQD快速识别花屏、蓝屏、画面冻结抖动
人工智能·音视频·实时音视频·视频编解码·视频质量诊断·花屏检测·画面抖动
柒.梧.3 天前
理解WebRTC:浏览器原生实时音视频通信
webrtc·实时音视频
REDcker4 天前
RTSP 直播技术详解
linux·服务器·网络·音视频·实时音视频·直播·rtsp
shansz20206 天前
暂时无法解决的关于STM32F103的RTC日期更新问题
stm32·嵌入式硬件·实时音视频
ZEGO即构开发者7 天前
如何用一句话让AI集成 ZEGO 产品
ai·实时互动·实时音视频·rtc
视频技术分享10 天前
2026年实时音视频服务选型深度解析
音视频·实时音视频·视频
摸摸电10 天前
RTC电路电池寿命计算?
实时音视频
深圳市友昊天创科技有限公司14 天前
友昊天创推出8K ,4K 120Hz 100米延长器方案
音视频·实时音视频·视频编解码