本帖最后由 icefox225 于 2015-4-20 16:20 编辑
最近在测试STM32F103的FLASH读写,发现一个问题
for(i = 0; i < i_Page; i++)
{
FLASH_ErasePage(m_u32FlashCheckAddr + 0x400 * i);
General_Wait_ms(10);
}m_u32FlashCheckAddr = 0x08040000
就是执行前面这个for循环的时候仿真器老会自己停在status = FLASH_WaitForLastOperation(EraseTimeout);这句话,我这里没设置断点啊,我继续点F5可以继续跑,功能也是能实现的。
这里的i_Page的值是45。
FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout)
{
FLASH_Status status = FLASH_COMPLETE;
/* Check for the Flash Status */
status = FLASH_GetStatus();
/* Wait for a Flash operation to complete or a TIMEOUT to occur */
do
{
delay();
IWDG_ReloadCounter();
status = FLASH_GetStatus();
Timeout--;
}while((status == FLASH_BUSY) && (Timeout != 0x00));
if(Timeout == 0x00 )
{
status = FLASH_TIMEOUT;
}
/* Return the operation status */
return status;
}
以上是这段代码,偶尔有几次就直接进入HardFault_Handler(),然后看门狗溢出重启了。
FLASH_ErasePage这个函数的内容没有改过。
群里有高手碰到过类似的问题吗?不知道跟STM32的FLASH是否有关。
|