打印

GD32 flash 存储用户数据不成功

[复制链接]
4260|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
289172800|  楼主 | 2018-9-17 10:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 289172800 于 2018-9-17 10:42 编辑

1.使用GD32F103C8T6 芯片,使用的是ST 的库
2.测试代码 BASE_ADDRESS= 0x800fc00;
  FLASH_ErasePage(BASE_ADDRESS);
  FLASH_ProgramHalfWord(BASE_ADDRESS,  0x1234);
  FLASH_ProgramHalfWord(BASE_ADDRESS+2,  0x5678);
  FLASH_ProgramHalfWord(BASE_ADDRESS+4 , 0x7890 );
测试方法: 用JFLASH 烧写hex, 然后运行代码, 然后用jflash 读取0x800fc00 地址 发现 所以内容都是 FF
用单步调试 是可以存储成功的, 全速运行 ,存储数据不成功。
已经按照要求改写了flash等待时间, 和增加了 While( ! (FLASH->CR & 0x200 ) );

当时发现问题也是我代码编写调试的时候 是可以的, 实际运行时候发现存储数据掉电就没有了 。
沙发
抹茶妹妹| | 2018-9-19 22:56 | 只看该作者
调试时候可以,实际运行就不可以? 仔细检查一下是不是哪里多了字符?

使用特权

评论回复
板凳
lvben5d| | 2018-9-20 19:25 | 只看该作者
你的时序有问题,参考我实战OK的。void EEPROM_EraseAndWriteOnePage(u32 addr, u32 *pbuf, u8 numberofword)
{
        u8 n = 0;
        fmc_state_enum fmc_state = FMC_READY;
        /* unlock the flash program/erase controller */
    fmc_unlock();
    /* clear all pending flags */
    fmc_flag_clear(FMC_FLAG_BANK0_END);
    fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
    fmc_flag_clear(FMC_FLAG_BANK0_PGERR);       
    fmc_state = fmc_page_erase(addr);  //GD32会自动擦掉这个地址 所在的整个页

         while((n<numberofword) && (FMC_READY == fmc_state))
         {
                fmc_state = fmc_word_program(addr, *pbuf);
                addr += 4;
                pbuf += 1; //
                n++;
        }
        /* lock the main FMC after the erase operation */
    fmc_lock();
}

使用特权

评论回复
地板
Lxiao| | 2018-10-20 09:48 | 只看该作者
学习下!

使用特权

评论回复
5
TaoziJ| | 2018-11-12 10:30 | 只看该作者
你的问题解决了吗,想请教一下。

使用特权

评论回复
6
vibra2016| | 2018-11-25 10:33 | 只看该作者
这个为何会掉电丢失的?

使用特权

评论回复
7
shenmu2012| | 2018-11-30 22:10 | 只看该作者
这个跟数据总线的使用没关系的吧?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

50

帖子

2

粉丝