Почему RTC не работает на STM32L0 с использованием Mbed OS 2? - PullRequest
1 голос
/ 23 апреля 2019

Я работаю над проектом, который интегрирует набор микросхем STM32L051R8T6, и мне нужны функции RTC для некоторых функций, таких как медленные таймеры и пробуждение в спящем режиме.Однако, если я вызываю set_time () Mbed для установки RTC, программа зависает или не выполняется должным образом.

Прежде чем что-либо реализовать, я пытаюсь запустить пример кода RTC Mbed: https://os.mbed.com/docs/mbed-os/v5.8/reference/rtc.html, но мне не повезло.RTC, кажется, устанавливается с помощью set_time (), однако, когда я вызываю время (NULL), я всегда получаю начально установленное время.Похоже, RTC не в счет.

Я компилирую код для STM32L053R8, используя онлайн-компилятор Mbed, не уверен, что эта цель сильно отличается от моей, и именно это и вызывает проблему.

Это код, который я пытаюсь выполнить:

#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 не изменяется:

Выход терминала

Любая помощь приветствуется!

1 Ответ

2 голосов
/ 24 апреля 2019

Включение полного пути к файлу 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);
    }
}
...