|
在备份寄存器中写入内容,发生复位后检测备份寄存器的内容和之前是否相同,如果不相同就写入值,结果在实验时,我给板子断电,再连电,发现还是能检测到备份寄存器的值。我都断电了,备份寄存器中的内容应该是消失了,但是没有,请问这是为什么呢?
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
- /* 允许写bkp寄存器 */
- PWR_BackupAccessCmd(ENABLE);
- /* 清除侵入检测事件标志位 */
- BKP_ClearFlag();
- /* 如果发生上电/掉电复位, 则标志位为1 */
- if(RCC_GetFlagStatus(RCC_FLAG_PORRST ) != RESET || RCC_GetFlagStatus(RCC_FLAG_PINRST)!=RESET)
- {
- /* 清除标志位 */
- RCC_ClearFlag();
- printf("发生上电/掉电复位\r\n");
- /* 判断备份数据寄存器是否写过内容 */
- if(CheckBackupReg(TESTDATA) == 0x00)
- {
- /* Backup data registers values are correct */
- printf("备份区数据正确\r\n");
- printf("数据为%d\r\n",BKP_ReadBackupRegister(BKP_DR1));
- }
- else
- {
- /* 备份数据寄存器的值不对,或者还没有写入寄存器(程序第一次执行) */
- /* 写入备份数据寄存器 */
- printf("备份区数据不正确,重新写入\r\n");
- WriteToBackupReg(TESTDATA);
- printf("数据为%d\r\n",BKP_ReadBackupRegister(BKP_DR1));
- }
- }
复制代码 写入寄存器和读取寄存器的函数,抄的标准库
- void WriteToBackupReg(uint16_t FirstBackupData)
- {
- uint32_t index = 0;
- for (index = 0; index < BKP_DR_NUMBER; index++)
- {
- BKP_WriteBackupRegister(BKPDataReg[index], FirstBackupData + index * 0xA5 );
- }
- }
复制代码- /* 循环检测所有备份数据寄存器的值,如果都相等,则返回0,否则返回1*/
- uint8_t CheckBackupReg(uint16_t FirstBackupData)
- {
- uint32_t index = 0;
- for (index = 0; index < BKP_DR_NUMBER; index++)
- {
- if (BKP_ReadBackupRegister(BKPDataReg[index]) != (FirstBackupData +index * 0xA5 ))
- {
- return (index + 1);
- }
- }
- return 0;
- }
复制代码
|
|