写Flash失败

2019-03-23 18:04发布

本帖最后由 wjroy11 于 2016-7-28 17:33 编辑
用的片子是STM32F103TBU6,写Flash之后查看内存数据并没有成功写进去,仍然是0xFF。
使用的Cube生成的配置,HAL库函数。
写Flash代码如下:
        //解锁
        HAL_FLASH_Unlock();
        //清标志位
  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP  | FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR );
        //擦除
        FLASH_PageErase(0x08005000);
        //写Flash
        uint64_t Buffer = 0x12345678;
        HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, 0x08005000,Buffer);
        //锁
        HAL_FLASH_Lock();

不知道问题出在哪里,求指教!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
yl20084784
1楼-- · 2019-03-23 22:55
/ 我给你看看我的标准库里面怎么弄得,参考一下。hal库的自己下个参考例程看看就行了:这是关键的方法。
                 FLASH_Unlock();
                FLASH_ErasePage(Save___arg_addr);
                for(i=0; i<124; i++) //save
                {
                    FLASH_ProgramHalfWord(Save___arg_addr+2*i,*(s++));
                }
                FLASH_Lock();


这个是我的。
建议你好好看看HAL_FLASH_Program这个函数

wjroy11
2楼-- · 2019-03-24 02:36
 精彩回答 2  元偷偷看……
wjroy11
3楼-- · 2019-03-24 05:12
yl20084784 发表于 2016-7-28 18:48
我给你看看我的标准库里面怎么弄得,参考一下。hal库的自己下个参考例程看看就行了:这是关键的方法。
    ...

单步调试了一下,寄存器Flash->CR的PG(编程位)置一操作不成功,SET_BIT(FLASH->CR, FLASH_CR_PG);这句语句运行之后PG标志位仍然为0,所以数据写不进Flash,不知道什么原因。Flash的WRPR(写保护)寄存器的值是0xFFFF,也就是没有打开写保护啊。
wjroy11
4楼-- · 2019-03-24 09:31
找到问题了,在擦除操作执行完之后PER标志位没有被清零,在HAL库函数中添加一条清零该标志位的操作就好了。

一周热门 更多>