ucos 中 执行 STMFLASH_Write 失败

2019-07-20 01:23发布

程序运行在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;    //·&#199;·¨&#181;&#216;&#214;·
    FLASH_Unlock();                                    //&#189;&#226;&#203;&#248;
  FLASH_DataCacheCmd(DISABLE);//FLASH&#178;&#193;&#179;&#253;&#198;&#218;&#188;&#228;,±&#216;&#208;&#235;&#189;&#251;&#214;&#185;&#202;&#253;&#190;&#221;&#187;&#186;&#180;&#230;
         
    addrx=WriteAddr;                //&#208;&#180;&#200;&#235;&#181;&#196;&#198;&#240;&#202;&#188;&#181;&#216;&#214;·
    endaddr=WriteAddr+NumToWrite*4;    //&#208;&#180;&#200;&#235;&#181;&#196;&#189;á&#202;&#248;&#181;&#216;&#214;·
    if(addrx<0X1FFF0000)            //&#214;&#187;&#211;&#208;&#214;÷&#180;&#230;&#180;&#162;&#199;&#248;,&#178;&#197;&#208;è&#210;&#170;&#214;&#180;&#208;&#208;&#178;&#193;&#179;&#253;&#178;&#217;×÷!!
    {
        while(addrx<endaddr)        //&#201;¨&#199;&#229;&#210;&#187;&#199;&#208;&#213;&#207;°&#173;.(&#182;&#212;·&#199;FFFFFFFF&#181;&#196;&#181;&#216;·&#189;,&#207;&#200;&#178;&#193;&#179;&#253;)
        {
            if(STMFLASH_ReadWord(addrx)!=0XFFFFFFFF)//&#211;&#208;·&#199;0XFFFFFFFF&#181;&#196;&#181;&#216;·&#189;,&#210;&#170;&#178;&#193;&#179;&#253;&#213;&#226;&#184;&#246;&#201;&#200;&#199;&#248;
            {   
                status=FLASH_EraseSector(STMFLASH_GetFlashSector(addrx),VoltageRange_3);//VCC=2.7~3.6V&#214;&#174;&#188;&#228;!!
                if(status!=FLASH_COMPLETE)break;    //·&#162;&#201;ú&#180;í&#206;ó&#193;&#203;
            }else addrx+=4;
        }
    }
    if(status==FLASH_COMPLETE)
    {
        while(WriteAddr<endaddr)//&#208;&#180;&#202;&#253;&#190;&#221;
        {
            if(FLASH_ProgramWord(WriteAddr,*pBuffer)!=FLASH_COMPLETE)//&#208;&#180;&#200;&#235;&#202;&#253;&#190;&#221;
            {
                break;    //&#208;&#180;&#200;&#235;&#210;ì&#179;&#163;
            }
            WriteAddr+=4;
            pBuffer++;
        }
    }
  FLASH_DataCacheCmd(ENABLE);    //FLASH&#178;&#193;&#179;&#253;&#189;á&#202;&#248;,&#191;&#170;&#198;&#244;&#202;&#253;&#190;&#221;&#187;&#186;&#180;&#230;
    FLASH_Lock();//&#201;&#207;&#203;&#248;
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
正点原子
1楼-- · 2019-07-20 04:43
 精彩回答 2  元偷偷看……
maimaivc
2楼-- · 2019-07-20 05:37
朋友解决没?我也遇到相同的问题了。

一周热门 更多>