我正在从事一个项目,该项目集成了STM32L051R8T6芯片组,并且我需要RTC功能来实现某些功能,例如慢速计时器和睡眠唤醒。但是,如果我调用Mbed的set_time()设置RTC,则程序将挂起或未按预期执行。
在执行任何操作之前,我试图运行Mbed的RTC示例代码:https://os.mbed.com/docs/mbed-os/v5.8/reference/rtc.html,但是我没有运气。 RTC似乎是用set_time()设置的,但是,当我调用time(NULL)时,我总是会得到初始设置时间。看起来RTC不在计数。
我正在使用Mbed的在线编译器为STM32L053R8编译代码,不确定该目标与我的目标是否有很大不同,这是导致问题的原因。
这是我要执行的代码:
#include "mbed.h"
int main() {
set_time(1256729737); // Set RTC time to Wed, 28 Oct 2009 11:35:37
while (true) {
time_t seconds = time(NULL);
printf("Time as seconds since January 1, 1970 = %d\n", seconds);
printf("Time as a basic string = %s", ctime(&seconds));
char buffer[32];
strftime(buffer, 32, "%I:%M %p\n", localtime(&seconds));
printf("Time as a custom formatted string = %s", buffer);
wait(1);
}
}
当它不挂起时,RTC时间不会改变:
欢迎任何帮助!
答案 0 :(得分:2)
包括rtc_api.h文件的完整路径,并在代码开头添加rtc_init()
解决了该问题。 rtc_init()
函数负责选择可用的时钟源。工作代码如下:
#include "mbed.h"
#include "mbed/hal/rtc_api.h"
int main() {
rtc_init();
set_time(1256729737); // Set RTC time to Wed, 28 Oct 2009 11:35:37
while (true) {
time_t seconds = time(NULL);
printf("Time as seconds since January 1, 1970 = %d\n", seconds);
printf("Time as a basic string = %s", ctime(&seconds));
char buffer[32];
strftime(buffer, 32, "%I:%M %p\n", localtime(&seconds));
printf("Time as a custom formatted string = %s", buffer);
wait(1);
}
}