代码如下: ..... 1)RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); 2)PWR_BackupAccessCmd(ENABLE); 3)if(BKP_ReadBackupRegister(BKP_DR1) != 0x5050) { ...... //其它语句 4) BKP_WriteBackupRegister(BKP_DR1, 0x5050); // 写备份寄存器 ...... //其它语句 } 问题:复位运行时3)行判断永远为真,{...}中的语句永远执行不了,后发现BKP_ReadBackupRegister(BKP_DR1)返回的值永远是4)行中的0x5050。如果把3)行和4)行中的0x5050改成0x0505,那么3)行中的BKP_ReadBackupRegister(BKP_DR1)返回的值奇怪地永远是0x0505,我保证此前没有执行过4)语句。 为了证明这一点,我把代码改成: INT16U DR1; //全局变量 ..... 1)RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); 2)PWR_BackupAccessCmd(ENABLE); 3)DR1=BKP_ReadBackupRegister(BKP_DR1); 4)if(DR1 != 0x5050) { ...... //其它语句 5) BKP_WriteBackupRegister(BKP_DR1, 0x5050); // 写备份寄存器 ...... //其它语句 } 把断点设置在3)行,非常奇怪,当单步执行了3)后,DR1的值绝对是5)行中的值。现在把5)行中的值改为0x1234,编译后debug,运行到断点3),单步运行3)后DR1的值变为0x1234,莫名其妙!我保证没有执行5)行!似乎read的结果永远是write中的设置。 后来我把5)中的值用全局变量代替,郁闷的是无论这个变量赋值为多少,3)行的结果永远是这个变量的值。 cpu是STM32F105RBT6,急盼大师指点! |
评分
查看全部评分