GD32单片机中的flash 的操作

[复制链接]
1419|6
手机看帖
扫描二维码
随时随地手机跟帖
3097488104|  楼主 | 2020-8-13 17:16 | 显示全部楼层 |阅读模式
有没有大牛做过对GD32F307VC对Flash进行读写操作的代码?求求

使用特权

评论回复
3097488104|  楼主 | 2020-8-13 17:40 | 显示全部楼层
相关FMC历程也可

使用特权

评论回复
lvben5d| | 2020-8-14 16:25 | 显示全部楼层

官网的完整 Lib库 里会有EXAMPLE吧?

使用特权

评论回复
〽️〽️〽️| | 2020-8-14 20:07 | 显示全部楼层
我做过读写都OK了,就是lib库里 的历程FMC 里面读写擦函数都有,都OK的

使用特权

评论回复
zeshoufx| | 2020-8-15 10:48 | 显示全部楼层
#include "fmc.h"

  
#define GD32_FLASH_BASE     0x08000000   
typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;   
#define FMC_PAGE_SIZE                ((u16)0x800)   
   
vu32 zNbrOfPage = 0x00;   
u32 Address = 0x00 ,wrp = 0,wrp2 = 0;   
volatile fmc_state_enum zFMCStatus = FMC_READY;   
volatile TestStatus zMemoryProgramStatus = PASSED;   
u32*ptrd;   
__IO TestStatus zTransferStatus = FAILED;   
   
   
   
u32 GDFLASH_ReadWord(u32 faddr)   
{   
    return *(vu32*)faddr;   
}     
   
u8 GDFLASH_Write(u32 WriteAddr,u32 *pBuffer,u32 NumToWrite)   
{   
//    uint32_t addrx=0;   
    uint32_t endaddr=0;   
//    uint32_t i;   
    fmc_unlock();   
//    addrx=WriteAddr;   
    endaddr=WriteAddr+NumToWrite*4;
       
    fmc_flag_clear(FMC_FLAG_BANK0_END);
    fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
    fmc_flag_clear(FMC_FLAG_BANK0_PGERR);   
       
    while(WriteAddr<endaddr)   
    {   
        zFMCStatus = fmc_word_program(WriteAddr,*pBuffer);  
               
        fmc_flag_clear(FMC_FLAG_BANK0_END);
                fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
                fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
               
        WriteAddr+=4;   
        pBuffer++;   
    }   
    fmc_lock();   
    return zFMCStatus;   
}   
   
u8 GDFMC_ErasePage(u32 PageAddr)   
{   
//    uint8_t i;   
    zTransferStatus = PASSED;   
    fmc_unlock();   
       
    fmc_flag_clear(FMC_FLAG_BANK0_END);
    fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
    fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
       
    zFMCStatus=fmc_page_erase(PageAddr);//GD32_FLASH_BASE + (FMC_PAGE_SIZE * PageAddr));   
       
    fmc_flag_clear(FMC_FLAG_BANK0_END);
    fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
    fmc_flag_clear(FMC_FLAG_BANK0_PGERR);   
       
    fmc_lock();   
   
    return zFMCStatus;   
}   
   
void GDFLASH_Read(u32 ReadAddr,u32 *pBuffer,u32 NumToRead)         
{   
    u32 i;   
    for(i=0;i<NumToRead;i++)   
    {   
        pBuffer[i]=GDFLASH_ReadWord(ReadAddr);   
        ReadAddr+=4;   
    }   
}   
   




#ifndef _fmc_H
#define _fmc_H

#include "bitband.h"
#include "led.h"

u32 GDFLASH_ReadWord(u32 faddr) ;
u8 GDFLASH_Write(u32 WriteAddr,u32 *pBuffer,u32 NumToWrite);
u8 GDFMC_ErasePage(u32 PageAddr) ;
void GDFLASH_Read(u32 ReadAddr,u32 *pBuffer,u32 NumToRead) ;


#endif



使用特权

评论回复
3097488104|  楼主 | 2020-8-18 15:17 | 显示全部楼层
mark了,谢谢

使用特权

评论回复
fengdaokanhai| | 2022-4-11 19:43 | 显示全部楼层

mark一下,感觉不错啊!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝