ihh2021 2024-07-01 22:05 采纳率: 20%
浏览 28

stm32F103C8T6使用Hal库擦除所有内部Flash异常

擦除不干净,使用下面代码,擦除页数填NbPages = 63 它只能擦除到第三页

static FLASH_EraseInitTypeDef EraseInitStruct = {
    .TypeErase = FLASH_TYPEERASE_PAGES,       //页擦除
    .PageAddress = 0x08000000,                //擦除地址
    .NbPages = 63                             //擦除页数
};


   HAL_FLASH_Unlock();
   uint32_t PageError = 0;
   __disable_irq();                             //擦除前关闭中断
   if (HAL_FLASHEx_Erase(&EraseInitStruct,&PageError) == HAL_OK)
   {
       printf("擦除 成功\r\n");
   }
   __enable_irq();   

img

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-01 22:05
    关注

    引自免费微信小程序:皆我百晓生

    从你的描述和提供的代码来看,你在使用STM32F103C8T6的HAL库进行Flash擦除操作时遇到了问题,你的代码只能成功擦除到第三页。这个问题可能由几个原因造成,我会帮助你逐一排查。

    首先,确保你正确理解了Flash页面的大小。通常,STM32的Flash页面大小是固定的,你需要确认你的设备一个页面包含多少字节。假设一个页面是1KB(这只是一个常见的值,具体大小需要查阅你的数据手册),那么NbPages = 63应该能够擦除大约63KB的Flash内存,即从地址0x0800 0000到0x0800 3FFC。然而,看起来你的设备总Flash大小是64KB,所以这可能是问题所在。当你尝试擦除超过实际可用Flash页面时,可能会遇到问题。你可能需要将NbPages设置得小一些以匹配你的设备实际可用的Flash大小。

    其次,你需要确认你的擦除地址(PageAddress)设置正确。你的代码中的擦除地址设置为0x08000000,这是STM32的默认Flash起始地址,但如果你的设备有特殊的内存布局或者使用了某些功能(比如嵌入式SRAM),那么实际的Flash起始地址可能会有所不同。你需要检查你的设备数据手册或者参考手册来确定正确的Flash起始地址。

    最后,确认你的HAL库版本和STM32F103C8T6的固件版本是否匹配。有时候,库函数的行为可能会随着版本的变化而变化,所以确保你使用的库版本与你的固件版本兼容是很重要的。

    如果以上都没有问题,那么可能是你的设备硬件问题。尝试在其他设备上运行相同的代码看看是否能够正常工作,如果其他设备可以正常工作,那么可能是你的STM32F1:anite有硬件问题。

    对于图1的内容,我看到了你在使用ST-LINK Utility工具查看设备的内存情况。从显示的内存内容来看,大部分内存区域都是未擦除的状态(显示为FFFFFFFF),这是正常的。只有在你执行擦除操作后,这些区域才会被擦除(变为全零)。因此,这个图并不能反映出你的擦除问题。

    总的来说,我建议你首先检查你的代码中的页面大小和擦除地址设置是否正确,然后确认你的HAL库版本和固件版本是否匹配。如果这些都没有问题,那么可能需要考虑硬件问题。希望这些信息对你有所帮助!

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月1日

悬赏问题

  • ¥15 安装python过程失败怎么解决?
  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?