我在使用 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
不确定我在这里做错了什么。
不确定我在这里做错了什么。
您正在使用不“众所周知”的功能而没有显示它们。 然而,
regBitSet(&(RTC->CR), PWR_CR_DBP, FALSE);
听起来您正在尝试设置 PWR_CR.DBP 位,但您正在访问 RTC_CR 寄存器(即完全不同的寄存器)。
注意,在访问 PWR 寄存器之前,您必须在 RCC 中设置 PWR 的时钟,并且在启用该时钟后您可能需要等待。