您当前的位置: 首页 > 

程序员正茂

暂无认证

  • 0浏览

    0关注

    283博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

GD32F103C读写flash

程序员正茂 发布时间:2022-05-22 16:43:47 ,浏览量:0

程序需要GD32库,用到了 "gd32f10x.h"、"gd32f10x_fmc.h"

  params_manage.h

#ifndef __PARAMS_MANAGE_H__
#define __PARAMS_MANAGE_H__
 
#include "gd32f10x.h"

#define FMC_WRITE_START_ADDR    ((uint32_t)0x08000D00)
#define FMC_WRITE_END_ADDR      ((uint32_t)0x080FFFFF)	


void fmc_erase_page(void);
void fmc_program(uint32_t* str, uint8_t len);
 
#endif

 params_manage.c

#include 
#include 
#include "params_manage.h"

 
void fmc_erase_page(void)
{
	fmc_unlock();  //fmc解锁
    /* clear all pending flags */
    fmc_flag_clear(FMC_FLAG_BANK0_END);
    fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
    fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
    
    /* erase the flash pages */
	fmc_page_erase(FMC_WRITE_START_ADDR);
	
	/* clear all pending flags */
	fmc_flag_clear(FMC_FLAG_BANK0_END);
	fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
	fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
	
	fmc_lock();  //fmc上锁
}

void fmc_write(uint32_t* str, uint8_t len)
{
    /* unlock the flash program/erase controller */
    fmc_unlock();

    uint32_t address = FMC_WRITE_START_ADDR;

		uint8_t i = 0;
    /* program flash */
    while(address < FMC_WRITE_END_ADDR && i < len){
        fmc_word_program(address, str[i]);
        address += 4;
				i++;
			
        fmc_flag_clear(FMC_FLAG_BANK0_END);
        fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
        fmc_flag_clear(FMC_FLAG_BANK0_PGERR); 
				
    }
		
				fmc_word_program(address, '\0');
        address += 4;
				i++;
			
        fmc_flag_clear(FMC_FLAG_BANK0_END);
        fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
        fmc_flag_clear(FMC_FLAG_BANK0_PGERR); 

    /* lock the main FMC after the program operation */
    fmc_lock();
}

void fmc_program(uint32_t* str, uint8_t len)
{
    /* unlock the flash program/erase controller */
    fmc_unlock();

    uint32_t address = FMC_WRITE_START_ADDR;

		uint8_t i = 0;
    /* program flash */
    while(address < FMC_WRITE_END_ADDR && i < len){
        fmc_word_program(address, str[i]);
        address += 4;
				i++;
			
        fmc_flag_clear(FMC_FLAG_BANK0_END);
        fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
        fmc_flag_clear(FMC_FLAG_BANK0_PGERR); 
				
    }
		
				fmc_word_program(address, '\0');
        address += 4;
				i++;
			
        fmc_flag_clear(FMC_FLAG_BANK0_END);
        fmc_flag_clear(FMC_FLAG_BANK0_WPERR);
        fmc_flag_clear(FMC_FLAG_BANK0_PGERR); 

    /* lock the main FMC after the program operation */
    fmc_lock();
}

调用

int main(void)
{
		
		//写Flash
		fmc_erase_page();			
	
		char str[32]="ss";
		fmc_program((uint32_t*)str, strlen(str));
	
		//读Flash
		char str2[32]={0};		
		unsigned char *ptr = (unsigned char *)FMC_WRITE_START_ADDR;	
		memcpy(str2, ptr, sizeof(str2));
		int i = strlen(str2);
}

关注
打赏
1660743125
查看更多评论
立即登录/注册

微信扫码登录

0.0356s