|
本帖最后由 huali8412 于 2024-10-19 17:17 编辑
void fmc_erase_pages(void)
{
/* unlock the flash program/erase controller */
fmc_unlock();
/* clear all pending flags */
fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR);
/* erase the flash pages */
fmc_page_erase(FMC_WRITE_START_ADDR);
fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR);
/* lock the main FMC after the erase operation */
fmc_lock();
}
void fmc_program(uint32_t *data, int data_len)
{
/* unlock the flash program/erase controller */
fmc_unlock();
uint32_t address = FMC_WRITE_START_ADDR;
/* program flash */
while(address <= FMC_WRITE_END_ADDR) {
if(data_len <= 0)
break;
fmc_word_program(address, *data);
address += 4U;
data++;
fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR);
data_len-=4;
}
/* lock the main FMC after the program operation */
fmc_lock();
}
先擦除再写入,能成功写入,但是过一会就死机了 程序崩了。计划写入最后 1KB 。地址如下
#define FMC_WRITE_START_ADDR ((uint32_t)0x08007C00U)
#define FMC_WRITE_END_ADDR ((uint32_t)0x08007fffU)
这个问题查了很多资料也没查到,不知道是不是用得人比较少。还是这个系列读写内部flash跟其他有区别。因为我用GD32F303系类测试过没问题的。看看大家有没有经验,帮忙支支招,谢谢 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|