你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
Angel_YY 发表于 2018-3-6 17:10 可以在程序中把flash的Page固定死,一个一个的擦除,每擦除一个修改程序重新擦除,可以定位到擦除哪一个页 ...
查看全部评分
Your UAT Feedback is needed within today.
5.18活动板子会不会是STM32L4呢
STM32隐藏
STM32 CUBE软件中找不到STM32L4系列单片机
应用
AAA
tiwen
BBBB
aaa
2222
你好!我测试了擦除单页,并写入单页。同样的结果。擦除成功,但是写入时卡死。下面是测试结果:
---------------------------------------------------------------
FirstPage = 240
NbOfPages = 1
Erase OK, BankNumber = 1
destination = 0x8078000
source = 0x3020100
FLASH->SR = 0x0
后面本应该反馈flash_program成功或者失败,但是程序卡死,不往下运行了。
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");
}
评分
查看全部评分
// 擦除该页面
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;
评分
查看全部评分