当前位置:   article > 正文

STM32的FLASH操作

STM32的FLASH操作

时间记录:2024/2/19

一、STM32F103C8T6FLASH介绍

(1)flash大小64K,地址0x08000000-0x08010000
(2)此芯片内存大小属于中容量产品,根据数据手册可知中容量产品一个扇区的大小为1K
闪存介绍
(3)我们在这里需要知道的点就是,可以将数据保存在flash中实现掉电保存

二、读写FLASH操作步骤

(1)写数据操作(一种方法)
1.解除写保护,向KEYR寄存器写入KEY1->0x45670123和KEY2->0xCDEF89AB进行解锁,按照顺序写入,否则会锁定FLASH_CR寄存器,直到下一次复位
2.清除状态位(可选),确认未在执行任何FLASH操作
3.清除扇区
4.写入半字16位数据
5.清除状态位(可选)
6.锁定写保护
RDP_Key->0x000000A5
(2)读数据操作(一种方法)
直接读取地址数据即可

三、代码示例(基于标准库实现)

(1)头文件

#ifndef __MYFLASH_H__
#define __MYFLASH_H__
#include <stm32f10x.h>

#define SECTORSIZE              1024                //一个扇区大小定义
#define MAXADDR                 0x08010000          //最大地址
#define LASTSECTORADDR          0x0800FC00          //最后一个扇区的地址

void vFlashWriteData(u32 addr,u8 *data,int data_len);//写数据,按照半字写入,一个扇区最多写入512个数据
void vFlashReadData(u32 addr,u8 *data,int data_len);//读数据

#endif

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

(2)源文件

#include "my_flash.h"

void vFlashWriteData(u32 addr,u8 *data,int data_len)
{
    if(addr < 0x08000000 || addr >= MAXADDR) return;    //地址校验
    
    u32 sectorBaseAddr = addr/1024*1024;
    
    FLASH_Unlock();//解锁
    FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR|FLASH_FLAG_OPTERR);//清除标志位,可不要
    FLASH_ErasePage(sectorBaseAddr);//擦除页数据,页的首地址,最后一页
    for(int i=0;i<data_len;i++){
        FLASH_ProgramHalfWord(addr+2*i,data[i]);
    }
    FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR|FLASH_FLAG_OPTERR);//清除标志位,可不要
    FLASH_Lock();//上锁
}

void vFlashReadData(u32 addr,u8 *data,int data_len)
{
    if(addr < 0x08000000 || addr >= MAXADDR) return;    //地址校验
    
    for(int i=0;i<data_len;i++){
        data[i]=(u8)(*(vu16*)(addr+i*2));
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/126127
推荐阅读
相关标签
  

闽ICP备14008679号