程序运行在407中 在ucos未启动时 STMFLASH_Write 可以正常对FLASH 写数据。 ucos任务执行后 执行STMFLASH_Write 始终失败!
void STMFLASH_Write(u32 WriteAddr,u32 *pBuffer,u32 NumToWrite)
{
FLASH_Status status = FLASH_COMPLETE;
u32 addrx=0;
u32 endaddr=0;
if(WriteAddr<STM32_FLASH_BASE||WriteAddr%4)return; //·Ç·¨µØÖ·
FLASH_Unlock(); //½âËø
FLASH_DataCacheCmd(DISABLE);//FLASH²Á³ýÆÚ¼ä,±ØÐë½ûÖ¹Êý¾Ý»º´æ
addrx=WriteAddr; //дÈëµÄÆðʼµØÖ·
endaddr=WriteAddr+NumToWrite*4; //дÈëµÄ½áÊøµØÖ·
if(addrx<0X1FFF0000) //Ö»ÓÐÖ÷´æ´¢Çø,²ÅÐèÒªÖ´ÐвÁ³ý²Ù×÷!!
{
while(addrx<endaddr) //ɨÇåÒ»ÇÐÕÏ°­.(¶Ô·ÇFFFFFFFFµÄµØ·½,ÏȲÁ³ý)
{
if(STMFLASH_ReadWord(addrx)!=0XFFFFFFFF)//ÓзÇ0XFFFFFFFFµÄµØ·½,Òª²Á³ýÕâ¸öÉÈÇø
{
status=FLASH_EraseSector(STMFLASH_GetFlashSector(addrx),VoltageRange_3);//VCC=2.7~3.6VÖ®¼ä!!
if(status!=FLASH_COMPLETE)break; //·¢Éú´íÎóÁË
}else addrx+=4;
}
}
if(status==FLASH_COMPLETE)
{
while(WriteAddr<endaddr)//дÊý¾Ý
{
if(FLASH_ProgramWord(WriteAddr,*pBuffer)!=FLASH_COMPLETE)//дÈëÊý¾Ý
{
break; //дÈëÒì³£
}
WriteAddr+=4;
pBuffer++;
}
}
FLASH_DataCacheCmd(ENABLE); //FLASH²Á³ý½áÊø,¿ªÆôÊý¾Ý»º´æ
FLASH_Lock();//ÉÏËø
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>