Estou tendo alguma dificuldade em usar os registros de backup de 20x 32 bits (com bateria) no F4 RTC. Ou seja, sempre que os leio recebo 0s, depois de escrever para eles, olhando os registradores com o depurador eles ainda parecem conter 0s.
O manual não diz nada sobre a necessidade de habilitar nenhum relógio para isso, simplesmente que o bit PWR_CR_DBP em RTC_CR precisa ser ativado para permitir gravações.
O código que tenho é basicamente:
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
Não tenho certeza do que estou fazendo de errado aqui.
Você está usando funções que não são "comumente conhecidas" sem mostrá-las. No entanto,
parece que você está tentando definir o bit PWR_CR.DBP, mas está acessando o registro RTC_CR (ou seja, um registro totalmente diferente).
Observe que você deve configurar o relógio do PWR no RCC antes de acessar os registradores do PWR, e também que após habilitar este relógio você pode precisar esperar .