stm32 Flash读写独立函数[库函数]

一. stm32的FLASH分为

1.主存储块:用于保存具体的程序代码和用户数据,主存储块是以页为单位划分的,

      一页大小为1KB。范围为从地址0x08000000开始的128KB内。

2.信息块   :用于负责由stm32出厂是放置2KB的启动程序(Bootloader)和512B的用户配置信息区

二.操作原则

对Flash 的写入操作要 “先擦除后写入”的原则;

stm32的内置flash 编程操作都是以页为单位写入的,而写入的操作必须要以16位半字宽度数据位单位,允许跨页写,写入非16位数据时将导致stm32内部总线错误。

进行内置flash读写时,必须要打开内部Rc振荡器。

头文件:

#ifndef __BSP_FLASH_H
#define    __BSP_FLASH_H
#include "stm32f10x.h"

typedef enum {
    FLASH_WRITE_OK = 1,
    FLASH_WRIKE_NO = 0,
    FLASH_READ_OK = 1,
    FLASH_READ_NO = 0
}FLASH_FLAG ;

extern unsigned char FLASH_WRITE(unsigned short int * memory_data);
extern unsigned char FLASH_READ(unsigned short int * memory_data,unsigned short int n);

#endif /* __LED_H */

读写函数:

#include "bsp_flash.h"   

FLASH_FLAG FLASH_STATUS;
static u32 count = 0;
/**---------------------------------------------------------------------------------
  * @brief   FLASH写入必不可少步骤
  * @param  输入数据起始地址
  * @retval 函数有无执行完毕
  --------------------------------------------------------------------------------*/

unsigned char FLASH_WRITE(unsigned short int * memory_data)
{
    static int t;
    count = 0;
    /*Enables or disables the Internal High Speed oscillator (HSI).*/
    RCC_HSICmd(ENABLE);
    /*打开FLASH可擦除控制器*/
    FLASH_Unlock();
    /*将flash三个标志位全清*/
    FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
    FLASH_ErasePage(0x8002000);
    t = sizeof((const char *)memory_data);
    while(count <= t)
    {
        /*flash 为一个字节存储,16位数据必须地址加2*/
        FLASH_ProgramHalfWord((0x8002000 +count*2),*(memory_data+count));
        count++;
        if(count > t)
        {
            FLASH_STATUS = FLASH_WRIKE_NO;
            return FLASH_STATUS;
        }
    }
    /* Locks the FLASH Program Erase Controller.*/
    FLASH_Lock();
    RCC_HSICmd(DISABLE);
    FLASH_STATUS = FLASH_WRITE_OK;
    return FLASH_STATUS;
}

/**---------------------------------------------------------------------------------
  * @brief   FLASH读出函数
  * @param  memory_data:输出存放地址,n 输出个数
  * @retval 函数有无执行完毕
  --------------------------------------------------------------------------------*/
unsigned char FLASH_READ(unsigned short int * memory_data,unsigned short int n)
{
    count = 0;
    while(count < n)
    {
      *(memory_data+count) = *(u16 *)(0x8002000 + count*2);
        printf("\r %d \r",*(memory_data+count));   //读取
        count++;
        if(count > n)
        {
            FLASH_STATUS = FLASH_READ_NO;
            return FLASH_STATUS;
        }
    }
    //FLASH_ErasePage(0x8002000);
    FLASH_STATUS = FLASH_READ_OK;
    return FLASH_STATUS;
}

/*********************************************END OF FILE**********************/
时间: 2024-07-29 10:13:40

stm32 Flash读写独立函数[库函数]的相关文章

STM32 对内部FLASH读写接口函数

因为要用内部FLASH代替外部EEPROM,把参数放在STM32的0x08000000+320K处,其中20K是bootloader,300K是应用程序. 原理:先要把整页FLASH的内容搬到RAM中,然后在RAM中改动,然后擦除整页FLASH,再把改动后的内容写入原Flash页.下面程序调试通过. /******************************************************************************** Function Name  :

stm32——Flash读写

stm32——Flash读写 一.Flash简介 通过对stm32内部的flash的读写可以实现对stm32的编程操作. stm32的内置可编程Flash在许多场合具有十分重要的意义.如其支持ICP(In Circuit Programming,在电路编程:在线编程)特性使得开发人员对stm32可以警醒调试开发,可以通过JTAG和SWD接口对stm32进行程序烧写:支持IAP(In Application Programming,在应用中编程)使得开发人员可以在stm32运行程序的时候对其内部程

stm32 Flash读写[库函数]

一. stm32的FLASH分为 1.主存储块:用于保存具体的程序代码和用户数据,主存储块是以页为单位划分的, 一页大小为1KB.范围为从地址0x08000000开始的128KB内. 2.信息块   :用于负责由stm32出厂是放置2KB的启动程序(Bootloader)和512B的用户配置信息区 二.操作原则 对Flash 的写入操作要 "先擦除后写入"的原则: stm32的内置flash 编程操作都是以页为单位写入的,而写入的操作必须要以16位半字宽度数据位单位,允许跨页写,写入非

野火STM32 Flash&amp;sd卡模拟U盘

在USB库文件mass_mal.c中添加对flash和sd读写的函数,USB库调用这些函数从而实现模拟U盘的功能 1 //mass_mal.c 2 /* Includes ------------------------------------------------------------------*/ 3 #include "..\User\sdcard\bsp_sdio_sdcard.h" 4 #include "..\User\spi_flash\fatfs_fla

[nRF51822] 6、基于nRF51822平台的flash读写研究

前言 本文重点介绍flash的数据存取特性.flash的内存划分.一个简单的存取图片的内存管理方式,以及对flash写前删的时间.删后读的时间.写后读的时间进行测量的一个小实验.目的在于更全面了解flash本身特点(尤其是限制),从而方便设计出高效的内存管理驱动. 本文参考论文:闪存的存储管理及索引方法研究_赵培_华中科技大博士论文_2011年 e-mail:[email protected] 一.Flash的特点  flash有几大奇葩的特点: 闪存具有多种不用于磁盘的特性,例如:(1)闪存具

u-boot分析(九)----nand flash初始化|nand flash读写分析

u-boot分析(九) 上篇博文我们按照210的启动流程,分析到了初始化串口,由于接下来的取消存储保护不是很重要,所以我们今天按照u-boot的启动流程对nand flash初始化进行分析. 今天我们会用到的文档: 1.        2440芯片手册:http://download.csdn.net/detail/wrjvszq/8358949 2.        6410芯片手册:http://download.csdn.net/detail/wrjvszq/8358965 3.      

stm32 flash

STM32 Flash具体说明不在这里累赘,想知道的自己百度吧,我拿stm32f103c8t6来举例吧,stm32f103c8t6是中等容量的芯片,flash大小为64K,每页大小为1K,通常我们代码不是很大的话可以直接将我们要保存的东西放到后面几K就可以,MDK软件编译完成是可以看到程序所占内存的.当然这里需要选择全编译. 例如:Program Size: Code=10332 RO-data=336 RW-data=152 ZI-data=3248 上面的大小则可以计算出flash的大小.f

TQ210裸机编程(13)——NAND FLASH读写

参考<韦东山毕业班视频>第1课第1.1节_自己写bootloader之编写第1阶段 参考<韦东山6410裸板视频>第7章nand flash实验 K9K8G08U0B : (1G + 32M) x 8bit Data Register : (2K + 64) x 8bit Page Program : (2K + 64)Byte Block Erase : (128K + 4K)Byte Page Read: (2K + 64)Byte The K9K8G08U0B has a 8

W5500 图片嵌入STM32 FLASH笔记(备忘)

方法一:利用winHex软件将图片转为16进制数组存储在FALSH中 1 __root const char HDMV_HTML[]="<html>" 2 "<head>" 3 "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />" 4 "<!-- TemplateBeginEditable name='do