0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

stm32f407 easyflash移植过程记录

冬至子 来源:螺丝松掉的人 作者:螺丝松掉的人 2023-07-31 14:24 次阅读

EasyFlash是一款开源的轻量级嵌入式Flash存储器库,非常适合智能家居、可穿戴、工控、医疗、物联网等需要断电存储功能的产品,资源占用极低,并且支持各种 MCU 片上存储器。

之所以将其移植到 robomaste-C 型开发板上,是为了存储重要日志,以及在正常运行情况下存储重要数据用于调试分析,尽量减小 debug 环境下对系统行为的影响。目前该开发板已经支持 easyflash ,进入 menucofig 中使能即可,main 函数中会进行初始化。(不需要使用 easyflash 时,一定要记得关闭该功能,Flash 的擦除次数有限)

1.jpg

robomaster C 板使用芯片 STM32F407IGH6 片上搭载 1MB Flash,具体参数如下所示:

1.jpg

1.jpg

对接要点

对接的具体流程就不详细描述了,有很多大佬成功移植的教程,项目仓库中也有丰富的相关文档。这里记录对接要点,以及需要注意的一些坑。

因为使用的是 STM32F407 1MB 的片上 Flash, 直接使用 HAL 库的相关 API,需要引用 Incstm32f4xx_hal_flash.h、 Incstm32f4xx_hal_flash_ex.h 这两个头文件;

对接时需要 Flash 的具体参数如,开始地址,操作粒度等,这些参数需要了解清楚,文章前面的图片中也可以读出;

可以搭配 STM32 ST-LINK Utility 工具查看 Flash 存储情况,擦除后全为 0xffffffff;
擦除和写入 Flash 时,需要先解锁 Flash,操作完之后再上锁;
HAL_FLASH_Program()函数对于不同芯片的HAL库,入参也不甚相同,有的芯片可以按1字节、2字节、4字节、8字节写入,比如STM32F407,有的芯片只能按8字节写入,比如STM32L4。同时,Flash写入时要注意字节对齐;

很多博客都是关于 F1 移植的,F4 和 F1 的是有区别的,而且网上大部分使用 HAL 都是 2016 年的,现在 HAL 以及更新过,并且相关 API 有变动,可以参考我的具体实现:

EfErrCode ef_port_erase(uint32_t addr, size_t size) {
EfErrCode result = EF_NO_ERR;
FLASH_Status flash_status;
size_t erased_size = 0;
uint32_t cur_erase_sector;
/* make sure the start address is a multiple of EF_ERASE_MIN_SIZE /
EF_ASSERT(addr % EF_ERASE_MIN_SIZE == 0);
/
start erase /
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR
| FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);
/
it will stop when erased size is greater than setting size */
while(erased_size < size) {
cur_erase_sector = stm32_get_sector(addr + erased_size);
flash_status = FLASH_EraseSector(cur_erase_sector, VoltageRange_3);
if (flash_status != FLASH_COMPLETE) {
result = EF_ERASE_ERR;
break;
}
erased_size += stm32_get_sector_size(cur_erase_sector);
}
FLASH_Lock();
return result;
}
EfErrCode ef_port_write(uint32_t addr, const uint32_t *buf, size_t size) {
EfErrCode result = EF_NO_ERR;
size_t i;
uint32_t read_data;
uint8_t *buf_8 = (uint8_t )buf;
FLASH_Unlock();
FLASH_ClearFlag(
FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR
| FLASH_FLAG_PGSERR);
for (i = 0; i < size; i++, buf_8++, addr++)
{
/
write data */
FLASH_ProgramByte(addr, *buf_8);
read_data = *(uint8_t ) addr;
/
check data */
if (read_data != *buf_8) {
result = EF_WRITE_ERR;
break;
}
}
FLASH_Lock();
return result;
}

分区首次使用的话是要擦除一次的,所以第一次报sector header check failed是对的;

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6032

    文章

    44513

    浏览量

    632683
  • STM32
    +关注

    关注

    2265

    文章

    10870

    浏览量

    354682
  • 嵌入式芯片
    +关注

    关注

    4

    文章

    230

    浏览量

    27663
  • 片上存储器
    +关注

    关注

    0

    文章

    6

    浏览量

    6446
  • STM32F407
    +关注

    关注

    15

    文章

    187

    浏览量

    29364
  • Flash单片机
    +关注

    关注

    0

    文章

    111

    浏览量

    9385
  • HAL库
    +关注

    关注

    1

    文章

    114

    浏览量

    6168
收藏 人收藏

    评论

    相关推荐

    国产优秀替代_APM32F407替代STM32F407记录

    的事情。 本文记录一下我使用APM32F407替代STM32F407制作的一个小demo(使用SPI外设读取W25Q128)。该demo使用原开发板电路
    的头像 发表于 05-10 11:22 1.9w次阅读
    国产优秀替代_APM32<b class='flag-5'>F407</b>替代<b class='flag-5'>STM32F407</b><b class='flag-5'>记录</b>

    记录STM32f407程序移植到GD32F407的全过程

    0、前言本文记录STM32f407程序移植到GD32F407的全过程,两个芯片是pin to pin,基本特性都是,最大168MHZ,102
    发表于 01-26 08:17

    STM32F407模板

    STM32F407模板,感兴趣可以看看。
    发表于 07-25 18:52 132次下载

    STM32F407 UCOS III实验

    STM32F407 UCOS III实验,介绍基于STM32F407的UCOSIII实例,参考下
    发表于 09-22 14:08 82次下载

    STM32F407 DCMI摄像头源码

    STM32F407 DCMI摄像头源码(电源技术存在的问题总结)-【资源描述】:STM32F407 DCMI摄像头源码【编程语言】:C语言
    发表于 09-16 16:15 125次下载
    <b class='flag-5'>STM32F407</b> DCMI摄像头源码

    STM32F407开发板用户手册】第13章 STM32F407启动过程详解

    STM32F407开发板用户手册】第13章 STM32F407启动过程详解
    发表于 11-23 18:06 73次下载
    【<b class='flag-5'>STM32F407</b>开发板用户手册】第13章 <b class='flag-5'>STM32F407</b>启动<b class='flag-5'>过程</b>详解

    STM32F407的串口UART 基础配置STM32CubeMX

    STM32F407的串口UART 基础配置STM32CubeMX
    发表于 11-29 16:06 54次下载
    <b class='flag-5'>STM32F407</b>的串口UART 基础配置<b class='flag-5'>STM32</b>CubeMX

    [STM32]STM32F407系列教程之四,pwm产生原理

    [STM32]STM32F407系列教程之四,pwm产生原理
    发表于 11-29 17:51 51次下载
    [<b class='flag-5'>STM32</b>]<b class='flag-5'>STM32F407</b>系列教程之四,pwm产生原理

    STM32F407STM32F105 CAN通讯失败的定位解决

    STM32F407STM32F105 CAN通讯失败的定位解决问题的发现问题的现象测试过程硬件调整测试软件调整测试结论基本结论结论扩展验证问题的发现在STM32 CAN总线的应用
    发表于 12-02 16:51 18次下载
    <b class='flag-5'>STM32F407</b>与<b class='flag-5'>STM32F</b>105 CAN通讯失败的定位解决

    STM32F407芯片介绍

    1. 文档准备做嵌入式开发的第一步就是了解主芯片,了解STM32F407主要要关注几个文档:1. stm32F407芯片手册2. stm32F407参考手册3. Arm Cortex-M4数据手册
    发表于 12-04 13:21 109次下载
    <b class='flag-5'>STM32F407</b>芯片介绍

    STM32CubeIDE 中针对 STM32F407 移植 ThreadX

    STM32CubeIDE 中针对 STM32F407 移植 ThreadX,不依赖盗版破解的Keil MDK、IAR等软件。
    发表于 12-04 13:36 17次下载
    在 <b class='flag-5'>STM32</b>CubeIDE 中针对 <b class='flag-5'>STM32F407</b> <b class='flag-5'>移植</b> ThreadX

    STM32F407原理图下载

    STM32F407原理图下载
    发表于 01-17 13:44 420次下载

    stm32f407原理图

    stm32f407原理图
    发表于 07-14 16:07 205次下载

    STM32F407最小系统

    STM32F407最小系统免费下载。
    发表于 07-31 11:01 170次下载

    STM32F407+FreeRTOS+LWIP1.4.1移植问题记录

    最近在学习物联网相关的知识,打算用ST的开发板STM32F407ZGT6作为控制中心,上面搭载FreeROTS实时系统,STM32F407开发板作为 TCP client
    的头像 发表于 07-21 14:09 3931次阅读
    <b class='flag-5'>STM32F407</b>+FreeRTOS+LWIP1.4.1<b class='flag-5'>移植</b>问题<b class='flag-5'>记录</b>