您的位置 首页 FPGA

根据stm32单片机,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);

/

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是存储的地址。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/347188.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部