为什么使用Mbed OS 2的RTC在STM32L0上不起作用?

时间:2019-04-23 13:54:32

标签: stm32 mbed real-time-clock

我正在从事一个项目,该项目集成了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时间不会改变:

Terminal output

欢迎任何帮助!

1 个答案:

答案 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);
    }
}