OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3053|回复: 2

ucos 中 执行 STMFLASH_Write 失败

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2019-5-9
在线时间
0 小时
发表于 2019-5-9 22:53:43 | 显示全部楼层 |阅读模式
1金钱
程序运行在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;
}



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-5-10 02:15:35 | 显示全部楼层
操作FLASH的时候,禁止中断,试试
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-6-12
在线时间
4 小时
发表于 2019-6-12 14:20:10 | 显示全部楼层
朋友解决没?我也遇到相同的问题了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-13 19:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表