一. 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 = ,
FLASH_WRIKE_NO = ,
FLASH_READ_OK = ,
FLASH_READ_NO =
}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 = ;
/**---------------------------------------------------------------------------------
* @brief FLASH写入必不可少步骤
* @param 输入数据起始地址
* @retval 函数有无执行完毕
--------------------------------------------------------------------------------*/ unsigned char FLASH_WRITE(unsigned short int * memory_data)
{
static int t;
count = ;
/*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*),*(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 = ;
while(count < n)
{
*(memory_data+count) = *(u16 *)(0x8002000 + count*);
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**********************/

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

  1. STM32 对内部FLASH读写接口函数(转)

    源:STM32 对内部FLASH读写接口函数 因为要用内部FLASH代替外部EEPROM,把参数放在STM32的0x08000000+320K处,其中20K是bootloader,300K是应用程序. ...

  2. stm32——Flash读写

    stm32——Flash读写 一.Flash简介 通过对stm32内部的flash的读写可以实现对stm32的编程操作. stm32的内置可编程Flash在许多场合具有十分重要的意义.如其支持ICP( ...

  3. stm32 Flash读写[库函数]

    stm32 的内置可编程Flash在许多场合具有十分重要的意义.如其支持ICP特性使得开发人员对stm32可以警醒调试开发,可以通过JTAG和SWD接口对stm32进行程序烧写:支持IAP特性使得开发 ...

  4. STM32 对内部FLASH读写接口函数

    因为要用内部FLASH代替外部EEPROM,把参数放在STM32的0x08000000+320K处,其中20K是bootloader,300K是应用程序. 原理:先要把整页FLASH的内容搬到RAM中 ...

  5. 野火STM32 Flash&sd卡模拟U盘

    在USB库文件mass_mal.c中添加对flash和sd读写的函数,USB库调用这些函数从而实现模拟U盘的功能 //mass_mal.c /* Includes ------------------ ...

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

    前言 本文重点介绍flash的数据存取特性.flash的内存划分.一个简单的存取图片的内存管理方式,以及对flash写前删的时间.删后读的时间.写后读的时间进行测量的一个小实验.目的在于更全面了解fl ...

  7. STM32 Flash 永久用户数据空间

    /********************************************************************************* * STM32 Flash 永久用 ...

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

    u-boot分析(九) 上篇博文我们按照210的启动流程,分析到了初始化串口,由于接下来的取消存储保护不是很重要,所以我们今天按照u-boot的启动流程对nand flash初始化进行分析. 今天我们 ...

  9. 关于STM32 Flash的一些问题

    注:本人感觉是STM32 Flash本身的问题. 最近做STM32的远程升级,保存到Flash里面,用于记录更新状态的信息总是无故的清理掉 最终测试发现 STM32的 Flash 擦除操作 并不一定会 ...

随机推荐

  1. 使用openssl生成RSA公钥和私钥对

    在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...

  2. 微软雅黑的Unicode码和英文名

    中文名 英文名 Unicode编码 微软雅黑 Microsoft YaHei \5FAE\8F6F\96C5\9ED1 宋 体 SimSun \5B8B\4F53 黑 体 SimHei \9ED1\4 ...

  3. img通过canvas转成base64编码

    <script type="text/javascript"> function getBase64Image(img) { var canvas = document ...

  4. 【Android】ImageMap,图片地图

    https://github.com/CFutureTeam/android-image-map package com.*.imagemap; import *.imagemap.ImageMap; ...

  5. gradle多项目 svn依赖

    当svn有多个子项目且没有根项目的时候,用eclipse拷贝下来是容易出问题的,经常子项目之间的依赖会有问题,还是推荐用IDEA. 操作说明: 如果SVN有 A,B,C,D四个项目,A为web项目,B ...

  6. java设计模式----外观模式(门面模式)

    外观模式主要应用场景在于为复杂的子系统提供一个简单的接口,提高子系统的独立性. 创建DrawerOne类: package facade; public class DrawerOne { publi ...

  7. R的替换sub和gsub

    sub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE, fixed = FALSE, useBytes = FALSE) gsu ...

  8. Linux系统下JDK安装配置(转载)

    转载出处:http://www.cnblogs.com/xuliangxing/p/7066913.html 本文主要介绍的是如何是Linux环境下安装JDK的,因为Linux环境下,很多时候也离不开 ...

  9. centos6安装postgresql-(2)

    1.Install yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64/pgdg-ce ...

  10. Yii 的session 实现返回上上页面

    学习session的页面:http://www.yiichina.com/doc/guide/2.0/runtime-sessions-cookies 关键摘要: $session = Yii::$a ...