GD32单片机中的flash 的操作

[复制链接]
2002|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 | 显示全部楼层
  1. #include "fmc.h"

  2.   
  3. #define GD32_FLASH_BASE     0x08000000   
  4. typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;   
  5. #define FMC_PAGE_SIZE                ((u16)0x800)   
  6.    
  7. vu32 zNbrOfPage = 0x00;   
  8. u32 Address = 0x00 ,wrp = 0,wrp2 = 0;   
  9. volatile fmc_state_enum zFMCStatus = FMC_READY;   
  10. volatile TestStatus zMemoryProgramStatus = PASSED;   
  11. u32*ptrd;   
  12. __IO TestStatus zTransferStatus = FAILED;   
  13.    
  14.    
  15.    
  16. u32 GDFLASH_ReadWord(u32 faddr)   
  17. {   
  18.     return *(vu32*)faddr;   
  19. }     
  20.    
  21. u8 GDFLASH_Write(u32 WriteAddr,u32 *pBuffer,u32 NumToWrite)   
  22. {   
  23. //    uint32_t addrx=0;   
  24.     uint32_t endaddr=0;   
  25. //    uint32_t i;   
  26.     fmc_unlock();   
  27. //    addrx=WriteAddr;   
  28.     endaddr=WriteAddr+NumToWrite*4;
  29.        
  30.     fmc_flag_clear(FMC_FLAG_BANK0_END);
  31.     fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
  32.     fmc_flag_clear(FMC_FLAG_BANK0_PGERR);   
  33.        
  34.     while(WriteAddr<endaddr)   
  35.     {   
  36.         zFMCStatus = fmc_word_program(WriteAddr,*pBuffer);  
  37.                
  38.         fmc_flag_clear(FMC_FLAG_BANK0_END);
  39.                 fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
  40.                 fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
  41.                
  42.         WriteAddr+=4;   
  43.         pBuffer++;   
  44.     }   
  45.     fmc_lock();   
  46.     return zFMCStatus;   
  47. }   
  48.    
  49. u8 GDFMC_ErasePage(u32 PageAddr)   
  50. {   
  51. //    uint8_t i;   
  52.     zTransferStatus = PASSED;   
  53.     fmc_unlock();   
  54.        
  55.     fmc_flag_clear(FMC_FLAG_BANK0_END);
  56.     fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
  57.     fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
  58.        
  59.     zFMCStatus=fmc_page_erase(PageAddr);//GD32_FLASH_BASE + (FMC_PAGE_SIZE * PageAddr));   
  60.        
  61.     fmc_flag_clear(FMC_FLAG_BANK0_END);
  62.     fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
  63.     fmc_flag_clear(FMC_FLAG_BANK0_PGERR);   
  64.        
  65.     fmc_lock();   
  66.    
  67.     return zFMCStatus;   
  68. }   
  69.    
  70. void GDFLASH_Read(u32 ReadAddr,u32 *pBuffer,u32 NumToRead)         
  71. {   
  72.     u32 i;   
  73.     for(i=0;i<NumToRead;i++)   
  74.     {   
  75.         pBuffer[i]=GDFLASH_ReadWord(ReadAddr);   
  76.         ReadAddr+=4;   
  77.     }   
  78. }   
  79.    




  80. #ifndef _fmc_H
  81. #define _fmc_H

  82. #include "bitband.h"
  83. #include "led.h"

  84. u32 GDFLASH_ReadWord(u32 faddr) ;
  85. u8 GDFLASH_Write(u32 WriteAddr,u32 *pBuffer,u32 NumToWrite);
  86. u8 GDFMC_ErasePage(u32 PageAddr) ;
  87. void GDFLASH_Read(u32 ReadAddr,u32 *pBuffer,u32 NumToRead) ;


  88. #endif



 楼主| 3097488104 发表于 2020-8-18 15:17 | 显示全部楼层
mark了,谢谢
fengdaokanhai 发表于 2022-4-11 19:43 | 显示全部楼层

mark一下,感觉不错啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部