如何设置 stm32f4 实时时钟(RTC)以在亚秒寄存器中获取有效值?
How to setup the stm32f4 real time clock(RTC) to get valid values in the sub second register?
我喜欢在高分辨率下使用我的 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 振荡器。设置代码如下所示:
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);
我想我在设置中遗漏了一些步骤。
有什么想法吗?
使用正确的 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);
我喜欢在高分辨率下使用我的 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 振荡器。设置代码如下所示:
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);
我想我在设置中遗漏了一些步骤。 有什么想法吗?
使用正确的 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);