读写STM32内部flash读写代码

由于老师的要求,所以写了一份读写STM32内部FLASH的代码,这样的话就可以把STM32里面没有用来保存代码段的部分用来存储数据了。

由于《stm32flash编程手册》是很久很久以前看的,现在也没心情去仔细看那份手册了。大概浏览了一下,只看到了STM32里面的flash是以16位为单位读写的。

为什么记住这个,因为之前想写一个字节老是出错,所以翻翻手册,果然看到不能写1个字节数据。而且还发现,flash写地址为奇数时也会出错。所以这份代码里面

写flash的地址只能是偶数。浏览过程中还发现,手册里面说写flash和擦除flash的时候会影响cpu的运行速度,没仔细看(真心不想看)。其他具体手册里面的资料的话没有了.

看有没有高手仔细看完,然后写个总结什么的。。。

而且flash的读写保护也没看清楚,好像这些保护都是针对页大小来保护的话。这样的话就可以只保护代码段,这些放数据段不用保护了,这样可以省下flash芯片,不错吧。

废话不多说,直接上代码。。

flash读写代码也不用初始化,拿来直接就用。哈哈。。。。。。。。。。

-------------------DataFlash.c----------------------------------

<span style="color:#009900;">#include "DataFlash.h"uint16_t Flash_Write_Without_check(uint32_t iAddress, uint8_t *buf, uint16_t iNumByteToWrite) {uint16_t i;volatile FLASH_Status FLASHStatus = FLASH_COMPLETE;i = 0;//    FLASH_UnlockBank1();while((i < iNumByteToWrite) && (FLASHStatus == FLASH_COMPLETE)){FLASHStatus = FLASH_ProgramHalfWord(iAddress, *(uint16_t*)buf);i = i+2;iAddress = iAddress + 2;buf = buf + 2;}return iNumByteToWrite;
}
/*** @brief  Programs a half word at a specified Option Byte Data address.* @note   This function can be used for all STM32F10x devices.* @param  Address: specifies the address to be programmed.* @param  buf: specifies the data to be programmed.* @param  iNbrToWrite: the number to write into flash* @retval if success return the number to write, -1 if error*  */
int Flash_Write(uint32_t iAddress, uint8_t *buf, uint32_t iNbrToWrite) {/* Unlock the Flash Bank1 Program Erase controller */uint32_t secpos;uint32_t iNumByteToWrite = iNbrToWrite;
uint16_t secoff;
uint16_t secremain;
uint16_t i = 0;    uint8_t tmp[FLASH_PAGE_SIZE];FLASH_UnlockBank1();
secpos=iAddress & (~(FLASH_PAGE_SIZE -1 )) ;//扇区地址
secoff=iAddress & (FLASH_PAGE_SIZE -1);     //在扇区内的偏移
secremain=FLASH_PAGE_SIZE-secoff;           //扇区剩余空间大小 volatile FLASH_Status FLASHStatus = FLASH_COMPLETE;if(iNumByteToWrite<=secremain) secremain = iNumByteToWrite;//不大于4096个字节while( 1 ) {Flash_Read(secpos, tmp, FLASH_PAGE_SIZE);   //读出整个扇区for(i=0;i<secremain;i++) {=""  ="" 校验数据if(tmp[secoff+i]!=0XFF)break;       //需要擦除 }if(i<secremain) {=""  ="" 需要擦除FLASHStatus = FLASH_ErasePage(secpos); //擦除这个扇区if(FLASHStatus != FLASH_COMPLETE)return -1;for(i=0;i<secremain;i++) { ="" 复制tmp[i+secoff]=buf[i];}Flash_Write_Without_check(secpos ,tmp ,FLASH_PAGE_SIZE);//写入整个扇区  } else {Flash_Write_Without_check(iAddress,buf,secremain);//写已经擦除了的,直接写入扇区剩余区间.}if(iNumByteToWrite==secremain) //写入结束了break;else {secpos += FLASH_PAGE_SIZE;secoff = 0;//偏移位置为0 buf += secremain;  //指针偏移iAddress += secremain;//写地址偏移iNumByteToWrite -= secremain;//字节数递减if(iNumByteToWrite>FLASH_PAGE_SIZE) secremain=FLASH_PAGE_SIZE;//下一个扇区还是写不完else secremain = iNumByteToWrite;//下一个扇区可以写完了}}FLASH_LockBank1();return iNbrToWrite;
}/*** @brief  Programs a half word at a specified Option Byte Data address.* @note   This function can be used for all STM32F10x devices.* @param  Address: specifies the address to be programmed.* @param  buf: specifies the data to be programmed.* @param  iNbrToWrite: the number to read from flash* @retval if success return the number to write, without error*  */
int Flash_Read(uint32_t iAddress, uint8_t *buf, int32_t iNbrToRead) {int i = 0;while(i < iNbrToRead ) {*(buf + i) = *(__IO uint8_t*) iAddress++;i++;}return i;
}</span>

-------------------DataFlash.h----------------------------------

<span style="color:#009900;">#ifndef   __DATAFLASH_H__
#define   __DATAFLASH_H__#include "stm32f10x.h"
#include "stm32f10x_flash.h"#if defined (STM32F10X_HD) || defined (STM32F10X_HD_VL) || defined (STM32F10X_CL) || defined (STM32F10X_XL)#define FLASH_PAGE_SIZE    ((uint16_t)0x800)#else#define FLASH_PAGE_SIZE    ((uint16_t)0x400)
#endifint Flash_Read(uint32_t iAddress, uint8_t *buf, int32_t iNbrToRead) ;
int Flash_Write(uint32_t iAddress, uint8_t *buf, uint32_t iNbrToWrite);#endif</span>

读写STM32内部flash读写代码相关推荐

  1. STM32 内部Flash读写 程序源码 [已验证]

    目录 STM32 内部Flash带缓存读写 程序源码 0 Macro 1.Flash_Erase 2. Flash_Read_Byte 3.Flash_Write_NoBuffer 4.Flash_W ...

  2. stm32内部Flash读写

    文章目录 1.stm32内部flash介绍 2.读写驱动编写 3.源码 上篇文章讲到了STM32来驱动外部flah的操作,flash真是好东西啊,内存大,能存的东西多,这样我们就可以用它来做一些大点的 ...

  3. STM32内部Flash读写问题

    STM32Flash读写之Flash调试技巧 文章目录 1.先熟悉所用MCU的Flash存储大小以及扇区地址 2.Flsah写之前为什么要先擦除 3.Flash擦除长时间占用CPU 4.实测Flash ...

  4. c语言 将结构体放在flash,stm32的内部flash读写操作(含结构体的保存)

    不同的stm32单片机的flash大小不同,这个需要查阅芯片手册或者查看STM32CubeMX软件. stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实 ...

  5. 基于STM32的Flash读写详解

    基于STM32的Flash读取 前言 介绍 STM32 FLASH 闪存的编程和擦除 Flash读写的标准库函数 软件设计 FLASH的读取 直接读取某一地址的内容 读取选定位置的选定大小的内容 FL ...

  6. 【dsPIC33E】内部Flash读写

    基于某些安全考虑或者降成本,我们不希望使用外部存储器件,但有时我们由需要记录一下参数,确保断电不丢失,这时,富余的内部代码存储Flash就派上用场了. 不同于外部存储器,几乎所有的内部Flash读写都 ...

  7. STM32CUBEIDE(16)----内部Flash读写

    STM32CUBEIDE(16)----内部Flash读写 概述 视频教学 csdn课程 硬件准备 配置时钟树 串口重定向 FLASH定义 低密度 中密度 高密度 变量定义 演示效果 最后 概述 本例 ...

  8. 基于STM32的flash读写和DAC音频播放

    一.STM32的flash读写 1.利用STM32CUBEMX创建工程 之前有过很多次创建工程的例子,这里大致过程如下: 2.keil中添加代码及修改配置 在flash.c中添加如下代码, 在main ...

  9. 单片机编程php,STC单片机内部FLASH读写程序(最新整理)

    <STC单片机内部FLASH读写程序(最新整理)>由会员分享,可在线阅读,更多相关<STC单片机内部FLASH读写程序(最新整理)(6页珍藏版)>请在人人文库网上搜索. 1.S ...

最新文章

  1. HDU_2112 HDU Today(DIjkstra + map映射)
  2. 学python是看书还是看视频-Python与豆瓣读书
  3. C/C++多线程编程之一】VC6.0安装pthread
  4. long类型20位示例_Java Long类lowerOneBit()方法与示例
  5. 现在很多人都做自媒体,谈谈个人的一些想法
  6. 认真学习系列:数据结构与算法——慕课网笔记
  7. 安卓安装之离线搭建Android Studio开发环境
  8. QT之QPainter用法
  9. MockingBrid(AI拟声)教程
  10. 1#组合数学初步——排列与组合之加法原理、乘法原理
  11. Python爬虫实战之三:requests-百度/360搜索关键词提交
  12. ST7735 TFT显示屏 显示问题
  13. 深度学习论文: Computer Vision for Road Imaging and Pothole Detection: A State-of-the-Art Review
  14. python定义公民类、变量有身份证号_Python趣解身份证号码的奥秘!
  15. 2022年西式面点师(中级)考试题及模拟考试
  16. SpringBoot并发压测工具ContiPerf
  17. zigzag convert
  18. 安卓手机小说阅读器_小说迷安卓app2020最新版下载安卓版下载_小说迷安卓app2020最新版下载v3.1.8手机版apk下载...
  19. 活久见!Linux命令行居然也可以用来查看图像?
  20. Windows 11最新版:任务管理器性能参数详解,什么是分页缓冲池和句柄

热门文章

  1. 团队任务分配管理软件,可以分配团队任务的团队管理软件
  2. Jmeter API文档分析
  3. 对象类型数据和对象实例数据_服务数据对象简介
  4. 一场激烈的变化袭来!没抓住机会的企业,将留重大遗憾!李宁、安踏纷纷中招..
  5. python实现读取传感器发送到串口的数据,并将读取的串口数据写入文件、数据库存储
  6. maching learning入门(二)
  7. 求1900到2017的闰年天数
  8. ANSYS经典界面2D和3D线圈磁场仿真
  9. [代码积累]解决HL7协议、TCP/IP通讯、16进制转字符串,中文乱码的问题。
  10. 十年一剑 高端OA迎来黄金收割期