我正在为STM32f207zg编写一个(更好的)硬故障处理程序,并希望执行以下操作:
1,2,4,5,7很简单,但是我在从SRAM中保存/还原时遇到了问题。
在使用数据填充 fault_crash_t 结构后,hardfault-handler调用函数 fault_bksram_init()。然后,它调用 fault_write_crash()以便将“报告”写入SRAM。我可以使用调试器看到数据实际上已写入 BKPSRAM_BASE 中定义的地址;但是,使用调试器进行重置后, BKPSRAM_BASE 处的内存将被 0xff 擦除。 换句话说,两次复位之间数据会丢失。
我已将正确的电压连接到VBat(RTC正常工作),但是我以前从未使用过备用SRAM。
我在SRAM初始化中缺少某些内容吗?在缺少的硬故障处理程序中执行此操作是否有必要?还是调试器复位使SRAM混乱?
void fault_bksram_init(void) {
/* Enable PWR clock */
RCC->APB1ENR |= RCC_APB1ENR_PWREN;
/* Enable backup SRAM Clock */
RCC->AHB1ENR |= RCC_AHB1ENR_BKPSRAMEN;
/* Disable write protection */
PWR->CR |= PWR_CR_DBP;
/* Enable backup regulator */
PWR->CSR |= PWR_CSR_BRE;
/* Wait for backup regulator to be ready */
while (!(PWR->CSR & (PWR_FLAG_BRR)));
}
void fault_write_crash(fault_crash_t* crash) {
/* Copy crash to BKSRAM */
memcpy((void*)BKPSRAM_BASE, (void*)crash, sizeof(fault_crash_t));
}
答案 0 :(得分:0)
在启用BKPSRAM时钟之前,无法读取备份SRAM。如果您需要像以前一样在异常处理程序中启用它,则以前未启用它,因此无法读取。