你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32的FLASH写入问题

[复制链接]
PaulRambo 提问时间:2018-3-6 15:55 /
阅读主题, 点击返回1楼
收藏 评论12 发布时间:2018-3-6 15:55
12个回答
PaulRambo 回答时间:2018-3-6 19:57:48
本帖最后由 PaulRambo 于 2018-3-6 19:58 编辑
Angel_YY 发表于 2018-3-6 17:10
可以在程序中把flash的Page固定死,一个一个的擦除,每擦除一个修改程序重新擦除,可以定位到擦除哪一个页 ...

你好!我测试了擦除单页,并写入单页。同样的结果。擦除成功,但是写入时卡死。下面是测试结果:
---------------------------------------------------------------
FirstPage =  240
NbOfPages =  1
Erase OK, BankNumber = 1
destination = 0x8078000
source = 0x3020100
FLASH->SR = 0x0

后面本应该反馈flash_program成功或者失败,但是程序卡死,不往下运行了。
dsjsjf 回答时间:2018-3-21 11:26:53
首先,写入的地址为什么是页地址?没看到在哪转换为Flash地址啊
Address = ((uint32_t)ADDR_FLASH_PAGE_500);               
status = FLASH_If_Write(Address, (uint32_t*) ramsource, 512 / 4);
其次,你要写入的是一串数据,但没看到你调用for循环之类的
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, destination, *((uint64_t *)(p_source + 2*i))) == HAL_OK)
    {
                        printf("HAL_FLASH_Program HAL_OK \r\n");
    }

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

zhao.zhao 回答时间:2018-3-21 11:44:10
擦除之前要解锁,写完以后要加锁

    // 擦除该页面
    HAL_FLASH_Unlock();  // 解锁
    /* Fill EraseInit structure*/
    EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;
    EraseInitStruct.PageAddress = page_start_addr;
    EraseInitStruct.NbPages     = 1;
    PageError = 0;
    if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)
    {
        retvalue = HAL_ERROR;      // 页面擦除失败 ,退出
    }
    else
    {   // 页面擦除成功,写入该页面的数据     
        retvalue = HAL_OK;
        addrbuf  = page_start_addr;
        for(i=0;i<FLASH_PAGE_SIZE_IN_WORD;i++)          // 一个页面按字节算为64个单元
        {
            if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addrbuf, DataBuf[i]) == HAL_OK)
            {
                addrbuf += 4;
            }
            else
            {
                retvalue = HAL_ERROR;
                i           = FLASH_PAGE_SIZE_IN_WORD;
            }
        }
    }

    HAL_FLASH_Lock();

return  retvalue;

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

12
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版