|  
 
 
尝试着使用了下STM32的BKP数据寄存器,试着RESET后仍旧保持之前的RTC,但是遇到了问题,BKP_DR寄存器中的值RESET之后就不见了。(试过BKP_DR34这个貌似直接写不进去,BKP_DR3可以写进去,写完后读出来也对,但RESET之后就没有了) 请教下为什么?应该怎么做能让BKP_DR在RESET后依旧有值。 
  int main() {     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);     RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);     RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);          RCC_RTC_Configuration(); ... } void RCC_RTC_Configuration() {     volatile uint16_t val = 0, val1 = 0;       PWR_BackupAccessCmd(ENABLE);     BKP_ClearFlag();     BKP_DeInit();       RCC_LSEConfig(RCC_LSE_ON);     while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);     RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);     RCC_RTCCLKCmd(ENABLE);       val = BKP_ReadBackupRegister(BKP_DR3);    //这里复位后每次读的值都为0x0000     if(val == 0x3434) {        //BackUp register Set //        PWR_BackupAccessCmd(DISABLE);         RCC_ClearFlag();     }     else {        //BackUp register Unset //        BKP_DeInit();         RTC_WaitForLastTask();         RTC_EnterConfigMode();         RTC_SetPrescaler(0x7FFF);         RTC_WaitForLastTask();         RTC_ITConfig(RTC_IT_ALR | RTC_IT_SEC, ENABLE);         RTC_ExitConfigMode();         RTC_WaitForLastTask();           BKP_WriteBackupRegister(BKP_DR3, (uint16_t)0x3434);   //这里改为BKP_DR34后下面读出来的val1为0x0000         val1 = BKP_ReadBackupRegister(BKP_DR3);         val1 = BKP_ReadBackupRegister(BKP_DR3); //        PWR_BackupAccessCmd(DISABLE);         RCC_ClearFlag();     }       } 
请检查纽扣电池供电是否正常。  用的核心板,直接用5V供电的,貌似没接VBAT,好吧...我试试接一个。 另外BKP_DR34写不进去是为什么呢? 小容量产品是指闪存存储器容量在16K至32K字节之间的STM32F101xx、STM32F102xx和 STM32F103xx微控制器。 中容量产品是指闪存存储器容量在64K至128K字节之间的STM32F101xx、STM32F102xx和 STM32F103xx微控制器。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控 制器。 互联型产品是指STM32F105xx和STM32F107xx微控制器。 
BKP特性 ● 20字节数据后备寄存器(中容量和小容量产品),或84字节数据后备寄存器(大容量和互联型 产品)   
 |