STM32F103系列内部Flash读写程序

发布时间:2024-11-08

实现了stm32内部剩余flash空间的读写操作,需要对stm32单片机有一定了解

/****************************************************************
*Function:STM32F103系列内部Flash读写操作
*Author: ValerianFan
*Date:2014/04/09
*E-Mail:fanwenjingnihao@http://
*Other:该程序不能直接编译运行,只包含了Flash读写操作
****************************************************************/


#include "stm32f10x.h"
#include "stm32f10x_flash.h" //flash操作接口文件(在库文件中),必须要包含


#define STARTADDR 0x08010000 //STM32F103RB 其他型号基本适用,未测试
volatile FLASH_Status FLASHStatus = FLASH_COMPLETE; //Flash操作状态变量


/****************************************************************
*Name:ReadFlashNBtye
*Function:从内部Flash读取N字节数据
*Input:ReadAddress:数据地址(偏移地址)ReadBuf:数据指针ReadNum:读取字节数
*Output: 读取的字节数
*Author: ValerianFan
*Date:2014/04/09
*E-Mail:fanwenjingnihao@http://
*Other:
****************************************************************/
int ReadFlashNBtye(uint32_t ReadAddress, uint8_t *ReadBuf, int32_t ReadNum)
{
int DataNum = 0;
ReadAddress = (uint32_t)STARTADDR + ReadAddress;
while(DataNum < ReadNum)
{
*(ReadBuf + DataNum) = *(__IO uint8_t*) ReadAddress++;
DataNum++;
}
return DataNum;
}

/****************************************************************
*Name:WriteFlashOneWord
*Function:向内部Flash写入32位数据
*Input:WriteAddress:数据地址(偏移地址)WriteData:写入数据
*Output:NULL
*Author: ValerianFan
*Date:2014/04/09
*E-Mail:fanwenjingnihao@http://
*Other:
****************************************************************/

void WriteFlashOneWord(uint32_t WriteAddress,uint32_t WriteData)
{
FLASH_UnlockBank1();
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
FLASHStatus = FLASH_ErasePage(STARTADDR);

if(FLASHStatus == FLASH_COMPLETE)
{
FLASHStatus = FLASH_ProgramWord(STARTADDR + WriteAddress, WriteData); //flash.c 中API函数
//FLASHStatus = FLASH_ProgramWord(StartAddress+4, 0x56780000); //需要写入更多数据时开启
//FLASHStatus = FLASH_ProgramWord(StartAddress+8, 0x87650000); //需要写入更多数据时开启
}
FLASH_LockBank1();
}


/****************************************************************
*Name:USART1_Send_One
*Function:USART1发送一个字节数据
*Input:Data:待发送数据
*Output: NULL
*Author: ValerianFan
*Date:2014/04/09
*E-Mail: fanwenjingnihao@http://
*Other:
****************************************************************/

void USART1_Se
nd_One(u8 Data)
{
USART_SendData(USART1, Data);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);

}

/**************************

实现了stm32内部剩余flash空间的读写操作,需要对stm32单片机有一定了解

**************************************
*Name:main
*Function:写入读取内部flash
*Input:NULL
*Output:NULL
*Author: ValerianFan
*Date:2014/04/09
*E-Mail:fanwenjingnihao@http://
*Other:
****************************************************************/


void main(void)
{
uint8_t Temp_Data[20] = {0};
unsigned char Temp = 0;
int ReadNum = 0;
int i = 0;

Dveice_Init(72); //系统初始化,设置时钟为72M
MCU_USART_Init();

WriteFlashOneWord(0,0x12345678); //写入数据
Delay_Ms(10);
ReadNum = ReadFlashNBtye(0, Temp_Data,4); //读取数据
Temp = (unsigned char)ReadNum;
USART1_Send_One(Temp); //发送读取的字节数
Delay_Ms(10);

while(1)
{
for(i = 0;i < ReadNum;i++)
{
USART1_Send_One(Temp_Data[i]); //发送读取到的数据,可观测数据的存储格式
Delay_Ms(100);
}
}

}



STM32F103系列内部Flash读写程序.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219