基于stm32单片机,FLASh先擦后写的函数分析案例

来源:本站
导读:目前正在解读《基于stm32单片机,FLASh先擦后写的函数分析案例》的相关信息,《基于stm32单片机,FLASh先擦后写的函数分析案例》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《基于stm32单片机,FLASh先擦后写的函数分析案例》的详细说明。

FLASh 必须是先擦后写

下面的函数是分析案例

基于stm32单片机,FLASh先擦后写的函数分析案例

void FLASH_WriteByte(u32 addr ,u16 flashdata1)

{

FLASH_Status FLASHstatus = FLASH_COMPLETE;

FLASH_Unlock();//解锁FLASH编程擦除控制器

// FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);//清除标志位

FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);

/

FLASHstatus=FLASH_ErasePage(addr);//擦除指定地址页

FLASHstatus=FLASH_ProgramHalfWord(addr, flashdata1);//从指定页的addr地址开始写

//FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);

FLASH_Lock();//锁定FLASH编程擦除控制

}

基本顺序:解锁-》清除标志位(可以不要)-》擦除-》写半字-》清楚标志位(也可以不要)-》上锁。

如果 FLASH_START_ADDR是宏定义的0x8000000+2048*255

1. 0x8000000是Flash的起始地址

2. 2048是因为我用的是大容量芯片,根据上一笔记Flash地址可以看出芯片每页容量2K,即2048字节,

3. 255表示芯片的最后一页,这个根据不同芯片而定。之所以从后面页写起可以防止储存数据破坏用户程序。

4. addr*2是因为每个数据占用2字节(半字),虽然写入的是1字节数据,但是编程是2字节为单位,

也就是说一个字节的数据也会占用两个字节地址。

这个子函数就是将数据flashdata1写到地址addr中去。数据的长度是可变的。

当需要读入数据的时候可以直接访问地址,

如:rdata=*(u16 *)0x08014000; //读flash中默认数据

0x08014000是存储的地址。

提醒:《基于stm32单片机,FLASh先擦后写的函数分析案例》最后刷新时间 2024-03-14 00:52:15,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《基于stm32单片机,FLASh先擦后写的函数分析案例》该内容的真实性请自行鉴别。