项目要求使用STM32L431内部FLASH存储一些调电保存参数,调试发现第一次将参数写入内部FLASH没有问题,当时当我再次写入时,报错,写入不成功,我调试发现在我写入之前FLASH->SR寄存器中的PGSERR位置1了,导致我擦除失败,我进一步调试发现,在我再次写之前这个标志位就已经置1了。 于是我单步调试发现这个标志置位发生在我调用“__HAL_TIM_DISABLE()”函数时(此函数位于HAL_TIM_Base_DeInit()中)自动置位的,我看手册也没找到产生这个问题的原因,是芯片BUG还是程序BUG? /** 测试代码 :希望有条件的跑跑看 */ int main(void) { /** 使能电源接口时钟 */ __HAL_RCC_PWR_CLK_ENABLE(); /** Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /** 时钟初始化 */ SystemClock_Config(); /** 下面这个函数会导致PGSERR置位 */ HAL_TIM_Base_DeInit(&TimHandle); HAL_Delay(1000); DEBUG("Run!!!\n"); for(;;) { } |