打印

GD32单片机中的flash 的操作

[复制链接]
1630|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的

使用特权

评论回复
5
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



使用特权

评论回复
6
3097488104|  楼主 | 2020-8-18 15:17 | 只看该作者
mark了,谢谢

使用特权

评论回复
7
fengdaokanhai| | 2022-4-11 19:43 | 只看该作者

mark一下,感觉不错啊!

使用特权

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

本版积分规则

2

主题

5

帖子

0

粉丝