前言
之前建立了文件系统,可是使用mkfs格式化SD卡时会报没有RTC错误
,原因是FATFS文件系统需要时间戳
现在给系统加入RTC功能
环境
1、ATK-STM32H743-APOLLO开发板
2、RT-Thread Studio
3、基于BSP建立工程
BSP设置
下载验证
在RT-Thread Studio中开启STM32的RTC功能,需按照以下步骤操作:
1. 创建/打开项目
- 打开RT-Thread Studio,创建新项目或打开现有STM32项目。
2. 启用RTC硬件驱动
- 在项目资源管理器中,双击 RT-Thread Settings 文件,进入图形化配置界面。
- 在 Hardware 部分,找到 RTC 选项并启用(勾选复选框)。
3. 配置时钟源
- 在 Hardware 配置中,选择RTC时钟源:
- LSE(外部低速晶振,通常32.768kHz,需硬件支持)。
- LSI(内部低速RC振荡器,精度较低)。
- 根据硬件设计选择合适的时钟源。若使用LSE,需确保开发板已焊接外部晶振。
4. 检查BSP配置
- 打开
board/board.h
文件,确认以下宏定义已启用:#define BSP_USING_RTC
- 若未定义,手动添加并保存。
5. 配置时钟树(必要时)
- 若BSP未自动配置RTC时钟源,需在
board.c
的rt_hw_board_init()
函数中添加时钟初始化代码:void rt_hw_board_init() {/* 其他初始化代码 */RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);RCC_LSEConfig(RCC_LSE_ON); // 启用LSE(若使用LSI则替换为RCC_LSICmd(ENABLE))while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET); // 等待LSE就绪RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); // 选择RTC时钟源RCC_RTCCLKCmd(ENABLE);RTC_WaitForSynchro();/* ... */ }
6. 使用RTC API
- 在应用程序中,通过RT-Thread的RTC设备接口操作:
#include <rtdevice.h>void rtc_test() {rt_device_t rtc_dev = rt_device_find("rtc");if (rtc_dev == RT_NULL){rt_kprintf("RTC device not found!\n");return;}rt_device_open(rtc_dev, RT_DEVICE_OFLAG_RDWR);/* 设置时间 */struct rt_rtc_time time_set = {2023, 10, 1, 15, 30, 0}; // 年月日时分秒rt_device_control(rtc_dev, RT_DEVICE_CTRL_RTC_SET_TIME, &time_set);/* 读取时间 */struct rt_rtc_time time_get;rt_device_control(rtc_dev, RT_DEVICE_CTRL_RTC_GET_TIME, &time_get);rt_kprintf("Current time: %04d-%02d-%02d %02d:%02d:%02d\n",time_get.tm_year, time_get.tm_mon, time_get.tm_mday,time_get.tm_hour, time_get.tm_min, time_get.tm_sec); } MSH_CMD_EXPORT(rtc_test, "Test RTC function");
7. 编译与下载
- 保存所有修改,编译项目并下载到目标板。
- 在串口终端使用
rtc_test
命令测试RTC功能。
注意事项
- 硬件检查:使用LSE时,确认开发板上的32.768kHz晶振已正确焊接,且VBAT电池引脚连接备用电源(保持时间在断电时)。
- 驱动依赖:确保RT-Thread版本支持目标STM32系列的RTC驱动,部分BSP可能需要手动完善驱动代码。
- 时间保持:若RTC时间重置,检查VBAT供电是否正常,或尝试在初始化时检查备份寄存器判断是否为首次上电。
通过以上步骤,即可在RT-Thread Studio中成功启用并使用STM32的RTC功能。如遇问题,可结合硬件调试工具(如STM32CubeMonitor)检查RTC寄存器状态。