0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

stm32f407 easyflash移植過程記錄

冬至子 ? 來源:螺絲松掉的人 ? 作者:螺絲松掉的人 ? 2023-07-31 14:24 ? 次閱讀

EasyFlash是一款開源的輕量級嵌入式Flash存儲器庫,非常適合智能家居、可穿戴、工控、醫(yī)療、物聯(lián)網(wǎng)等需要斷電存儲功能的產(chǎn)品,資源占用極低,并且支持各種 MCU 片上存儲器。

之所以將其移植到 robomaste-C 型開發(fā)板上,是為了存儲重要日志,以及在正常運(yùn)行情況下存儲重要數(shù)據(jù)用于調(diào)試分析,盡量減小 debug 環(huán)境下對系統(tǒng)行為的影響。目前該開發(fā)板已經(jīng)支持 easyflash ,進(jìn)入 menucofig 中使能即可,main 函數(shù)中會進(jìn)行初始化。(不需要使用 easyflash 時,一定要記得關(guān)閉該功能,F(xiàn)lash 的擦除次數(shù)有限)

1.jpg

robomaster C 板使用芯片 STM32F407IGH6 片上搭載 1MB Flash,具體參數(shù)如下所示:

1.jpg

1.jpg

對接要點

對接的具體流程就不詳細(xì)描述了,有很多大佬成功移植的教程,項目倉庫中也有豐富的相關(guān)文檔。這里記錄對接要點,以及需要注意的一些坑。

因為使用的是 STM32F407 1MB 的片上 Flash, 直接使用 HAL 庫的相關(guān) API,需要引用 Incstm32f4xx_hal_flash.h、 Incstm32f4xx_hal_flash_ex.h 這兩個頭文件;

對接時需要 Flash 的具體參數(shù)如,開始地址,操作粒度等,這些參數(shù)需要了解清楚,文章前面的圖片中也可以讀出;

可以搭配 STM32 ST-LINK Utility 工具查看 Flash 存儲情況,擦除后全為 0xffffffff;
擦除和寫入 Flash 時,需要先解鎖 Flash,操作完之后再上鎖;
HAL_FLASH_Program()函數(shù)對于不同芯片的HAL庫,入?yún)⒁膊簧跸嗤?,有的芯片可以?字節(jié)、2字節(jié)、4字節(jié)、8字節(jié)寫入,比如STM32F407,有的芯片只能按8字節(jié)寫入,比如STM32L4。同時,F(xiàn)lash寫入時要注意字節(jié)對齊;

很多博客都是關(guān)于 F1 移植的,F(xiàn)4 和 F1 的是有區(qū)別的,而且網(wǎng)上大部分使用 HAL 都是 2016 年的,現(xiàn)在 HAL 以及更新過,并且相關(guān) API 有變動,可以參考我的具體實現(xiàn):

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;
}

分區(qū)首次使用的話是要擦除一次的,所以第一次報sector header check failed是對的;

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6026

    文章

    44455

    瀏覽量

    630905
  • STM32
    +關(guān)注

    關(guān)注

    2263

    文章

    10847

    瀏覽量

    353775
  • 嵌入式芯片
    +關(guān)注

    關(guān)注

    4

    文章

    230

    瀏覽量

    27641
  • 片上存儲器
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    6445
  • STM32F407
    +關(guān)注

    關(guān)注

    15

    文章

    187

    瀏覽量

    29292
  • Flash單片機(jī)
    +關(guān)注

    關(guān)注

    0

    文章

    111

    瀏覽量

    9368
  • HAL庫
    +關(guān)注

    關(guān)注

    1

    文章

    114

    瀏覽量

    6113
收藏 人收藏

    評論

    相關(guān)推薦

    國產(chǎn)優(yōu)秀替代_APM32F407替代STM32F407記錄

    的事情。 本文記錄一下我使用APM32F407替代STM32F407制作的一個小demo(使用SPI外設(shè)讀取W25Q128)。該demo使用原開發(fā)板電路
    的頭像 發(fā)表于 05-10 11:22 ?1.9w次閱讀
    國產(chǎn)優(yōu)秀替代_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
    發(fā)表于 01-26 08:17

    STM32F407模板

    STM32F407模板,感興趣可以看看。
    發(fā)表于 07-25 18:52 ?130次下載

    STM32F407 UCOS III實驗

    STM32F407 UCOS III實驗,介紹基于STM32F407的UCOSIII實例,參考下
    發(fā)表于 09-22 14:08 ?81次下載

    STM32F407 DCMI攝像頭源碼

    STM32F407 DCMI攝像頭源碼(電源技術(shù)存在的問題總結(jié))-【資源描述】:STM32F407 DCMI攝像頭源碼【編程語言】:C語言
    發(fā)表于 09-16 16:15 ?123次下載
    <b class='flag-5'>STM32F407</b> DCMI攝像頭源碼

    STM32F407開發(fā)板用戶手冊】第13章 STM32F407啟動過程詳解

    STM32F407開發(fā)板用戶手冊】第13章 STM32F407啟動過程詳解
    發(fā)表于 11-23 18:06 ?73次下載
    【<b class='flag-5'>STM32F407</b>開發(fā)板用戶手冊】第13章 <b class='flag-5'>STM32F407</b>啟動<b class='flag-5'>過程</b>詳解

    STM32F407的串口UART 基礎(chǔ)配置STM32CubeMX

    STM32F407的串口UART 基礎(chǔ)配置STM32CubeMX
    發(fā)表于 11-29 16:06 ?54次下載
    <b class='flag-5'>STM32F407</b>的串口UART 基礎(chǔ)配置<b class='flag-5'>STM32</b>CubeMX

    [STM32]STM32F407系列教程之四,pwm產(chǎn)生原理

    [STM32]STM32F407系列教程之四,pwm產(chǎn)生原理
    發(fā)表于 11-29 17:51 ?51次下載
    [<b class='flag-5'>STM32</b>]<b class='flag-5'>STM32F407</b>系列教程之四,pwm產(chǎn)生原理

    STM32F407STM32F105 CAN通訊失敗的定位解決

    STM32F407STM32F105 CAN通訊失敗的定位解決問題的發(fā)現(xiàn)問題的現(xiàn)象測試過程硬件調(diào)整測試軟件調(diào)整測試結(jié)論基本結(jié)論結(jié)論擴(kuò)展驗證問題的發(fā)現(xiàn)在STM32 CAN總線的應(yīng)用
    發(fā)表于 12-02 16:51 ?18次下載
    <b class='flag-5'>STM32F407</b>與<b class='flag-5'>STM32F</b>105 CAN通訊失敗的定位解決

    STM32F407芯片介紹

    1. 文檔準(zhǔn)備做嵌入式開發(fā)的第一步就是了解主芯片,了解STM32F407主要要關(guān)注幾個文檔:1. stm32F407芯片手冊2. stm32F407參考手冊3. Arm Cortex-M4數(shù)據(jù)手冊
    發(fā)表于 12-04 13:21 ?109次下載
    <b class='flag-5'>STM32F407</b>芯片介紹

    STM32CubeIDE 中針對 STM32F407 移植 ThreadX

    STM32CubeIDE 中針對 STM32F407 移植 ThreadX,不依賴盜版破解的Keil MDK、IAR等軟件。
    發(fā)表于 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原理圖下載
    發(fā)表于 01-17 13:44 ?418次下載

    stm32f407原理圖

    stm32f407原理圖
    發(fā)表于 07-14 16:07 ?202次下載

    STM32F407最小系統(tǒng)

    STM32F407最小系統(tǒng)免費下載。
    發(fā)表于 07-31 11:01 ?168次下載

    STM32F407+FreeRTOS+LWIP1.4.1移植問題記錄

    最近在學(xué)習(xí)物聯(lián)網(wǎng)相關(guān)的知識,打算用ST的開發(fā)板STM32F407ZGT6作為控制中心,上面搭載FreeROTS實時系統(tǒng),STM32F407開發(fā)板作為 TCP client
    的頭像 發(fā)表于 07-21 14:09 ?3751次閱讀
    <b class='flag-5'>STM32F407</b>+FreeRTOS+LWIP1.4.1<b class='flag-5'>移植</b>問題<b class='flag-5'>記錄</b>