如何设置stm32f4实时时钟(RTC)以获得子秒寄存器中的有效值?

问题描述 投票:1回答:1

我喜欢在我的stm32f412上使用高分辨率的RTC。为了测试我正在使用CubeMX代码生成器。在阅读我使用的rtc时间戳时:

// get sub second
ss = (u16_t) LL_RTC_TS_GetSubSecond(RTC);
// 0x00HHMMSS in bcd format
t = LL_RTC_TIME_Get(RTC);
// 0xWWDDMMYY
d = LL_RTC_DATE_Get(RTC);

rtc在PC14和PC15(LSE输入)使用32.768kHz的osc。设置代码如下所示:

static LL_RTC_InitTypeDef const initData = {
    .HourFormat = LL_RTC_HOURFORMAT_24HOUR,
    /* prescaler values for LSE @ 32768 Hz */
    .AsynchPrescaler = 0x7F,
    .SynchPrescaler = 0x00FF
};

LL_PWR_EnableBkUpAccess();
LL_RCC_ForceBackupDomainReset();
LL_RCC_ReleaseBackupDomainReset();

LL_RCC_LSE_Enable();

/* Wait untill LSE is ready */
while (LL_RCC_LSE_IsReady() != 1) {};

LL_RCC_SetRTCClockSource(LL_RCC_RTC_CLKSOURCE_LSE);

LL_RCC_EnableRTC();

if (LL_RTC_DeInit(RTC) != SUCCESS) {
    return -EIO;
}

if (LL_RTC_Init(RTC, (LL_RTC_InitTypeDef *)&initData) != SUCCESS) {
    return -EIO;
}

LL_RTC_EnableShadowRegBypass(RTC);

猜猜我错过了一些设置步骤。有任何想法吗?

arm stm32f4 real-time-clock
1个回答
1
投票

使用正确的API函数有助于:

// get sub section
ss = (u16_t) LL_RTC_TIME_GetSubSecond(RTC);
// 0x00HHMMSS in bcd format
t = LL_RTC_TIME_Get(RTC);
// 0xWWDDMMYY
d = LL_RTC_DATE_Get(RTC);
© www.soinside.com 2019 - 2024. All rights reserved.