为存储WiFi配置,能否将STM32F4的flash_erase_sector适配到STM32F103C8?
STM32F103C8适配F4系列
flash_erase_sector函数的问题解答 核心结论:STM32F103C8不能直接使用F4系列的
flash_erase_sector函数,两者的闪存架构、HAL库实现差异显著。具体差异原因:
- 闪存结构不同:F103C8的闪存采用分页(Page)结构,而F4系列是扇区(Sector)结构,擦除操作的基本单元定义完全不同。
- HAL库函数实现不同:F1系列的闪存擦除函数为
HAL_FLASHEx_Erase,定义在stm32f1xx_hal_flash_ex.h中,参数是FLASH_EraseInitTypeDef结构体,需指定擦除类型(分页擦除)和起始页;而F4的flash_erase_sector是专门针对扇区设计的擦除函数。
适配方案:
- 使用F1系列HAL库提供的标准闪存操作函数,示例流程:
- 解锁闪存:
HAL_FLASH_Unlock() - 配置擦除初始化结构体:
FLASH_EraseInitTypeDef EraseInitStruct; EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; EraseInitStruct.PageAddress = 0x0800F000; // 选择要擦除的起始页地址 EraseInitStruct.NbPages = 1; // 要擦除的页数 - 执行擦除:
HAL_FLASHEx_Erase(&EraseInitStruct, &PageError); - 锁定闪存:
HAL_FLASH_Lock()
- 解锁闪存:
- 存储WiFi配置这类小数据时,建议选择F103C8闪存的最后几个分页(避免覆盖程序区),每次更新先擦除分页再写入数据。
- 使用F1系列HAL库提供的标准闪存操作函数,示例流程:
内容的提问来源于stack exchange,提问作者Kerem
相关产品推荐
相关产品推荐

