STM32 F4 - 无法读取/写入 20 个 RTC 备份寄存器

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

我在使用 F4 RTC 中的 20x 32 位(电池供电)备份寄存器时遇到一些困难。也就是说,每当我读取它们时,我都会得到 0,写入它们后,用调试器查看寄存器,它们似乎仍然包含 0。

手册没有提到必须为此启用任何时钟,只是需要声明 RTC_CR 中的 PWR_CR_DBP 位以允许写入。

我的代码基本上是:

backupRegisterBase = (U32 *)(&(RTC->BKP0R));    //  treat locations as sequential array of 32 bit registers

....

//  reading

regBitSet(&(RTC->CR), PWR_CR_DBP, FALSE);   //  ensure W bit cleared for backup register write protection 

for (U8 i = 0; i < RTC_BKP_NUMBER; i++) //  copy the NV registers
    backupShadowRegisters[i] = backupRegisterBase[i];

....

//  writing

regBitSet(&(RTC->CR), PWR_CR_DBP, TRUE);    //  W bit set for backup registers

for (U8 i = 0; i < RTC_BKP_NUMBER; i++)
    backupRegisterBase[i] = backupShadowRegisters[i];

regBitSet(&(RTC->CR), PWR_CR_DBP, FALSE);   //  W bit cleared for backup registers protection 

不确定我在这里做错了什么。

stm32f4 real-time-clock non-volatile
1个回答
0
投票

不确定我在这里做错了什么。

您正在使用不“众所周知”的功能而没有显示它们。 然而,

regBitSet(&(RTC->CR), PWR_CR_DBP, FALSE);

听起来您正在尝试设置 PWR_CR.DBP 位,但您正在访问 RTC_CR 寄存器(即完全不同的寄存器)。

注意,在访问 PWR 寄存器之前,您必须在 RCC 中设置 PWR 的时钟,并且在启用该时钟后您可能需要等待

© www.soinside.com 2019 - 2024. All rights reserved.