STM32F407系统,软件有向FLASH写数据的要求,在操作FLASH期间串口有数据接收,由于不能及时读取串口接收数据而发生ORE中断从而导致假死机,本人在操作FLASH函数中有如下做法:
void FlashPageWrite(Uint32 SectorNum,Uint32 *SourceBuf,Uint32 Len)
{
Uint32 Cnt = 0;
__disable_irq() ; //关闭总中断
FLASH_Unlock();
FlashSectorErase(SectorNum<<3);
for(Cnt = 0;Cnt < Len;Cnt++)
{
FLASH_ProgramWord(FlashAddressTab[SectorNum]+Cnt*4,*(SourceBuf+Cnt));
if(*(Uint32 *)(FlashAddressTab[SectorNum]+Cnt*4) != *(SourceBuf+Cnt))
{
break;
}
}
FLASH_Lock();
USART_ClearITPendingBit(USART6,USART_IT_ORE); //清除ORE中断
Cnt = USART_ReceiveData(USART6);
__enable_irq() ; //使能总中断
}
以上做法在DEBUG状态下全速运行,能够解决问题,但是脱离仿真器就不能有效避免ORE中断的影响,这是为什么?
有没有更好的方法解决这个问题?谢谢!!!
|