STM32f103 —— 内部flash读写

发布者:心灵之窗最新更新时间:2020-12-07 来源: elecfans关键字:STM32f103  内部flash  读写 手机看文章 扫描二维码
随时随地手机看文章

#ifndef _MCU_FLASH_H_

#define _MCU_FLASH_H_

 

#include

 

// STM32f103C8T6 64KB FLASH,20KB RAM,1个扇区1KB,程序起始0x8000000

#define FLASH_START_ADDR    ((uint32_t)0x8000000)

#define FLASH_END_ADDR      ((uint32_t)(0x8000000 + FLASH_SECTOR_NUM * FLASH_SECTOR_SIZE))

#define FLASH_SECTOR_NUM    128  // 扇区数量

#define FLASH_SECTOR_SIZE   1024 // 扇区大小1KB

 

typedef enum

  FLASH_FAILURE = 0,

  FLASH_SUCCESS,

} flash_status_t;

 

//===========================================================================

flash_status_t FlashErase(uint32_t addr, uint8_t count);

uint32_t FlashWrite(uint32_t addr, uint8_t *buffer, uint32_t length);

uint32_t FlashRead(uint32_t addr, uint8_t *buffer, uint32_t length);

 

#endif /* _MCU_FLASH_H_ */

 


#include "mcu_flash.h"

#include

#include "stm32f10x_flash.h"

 

// addr:地址  count:块数量

flash_status_t FlashErase(uint32_t addr, uint8_t count)

{

  uint8_t i;

 

  FLASH_Unlock();

 

  FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);

 

  for(i = 0; i < count; ++i)

  {

    if(FLASH_ErasePage(addr + i * FLASH_SECTOR_SIZE) != FLASH_COMPLETE)

    {

      return FLASH_FAILURE;

    }

  }

 

  FLASH_Lock();

 

  return FLASH_SUCCESS;

}

 

uint32_t FlashWrite(uint32_t addr, uint8_t *buffer, uint32_t length)

{

  uint16_t i, data = 0;

 

  FLASH_Unlock();

 

  FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);

 

  for(i = 0; i < length; i += 2)

  {

    data = (*(buffer + i + 1) << 8) + (*(buffer + i));

    if(FLASH_ProgramHalfWord((uint32_t)(addr + i), data) != FLASH_COMPLETE)

    {

      return i;

    }

  }

  

  FLASH_Lock();

 

  return length;

}

 

uint32_t FlashRead(uint32_t addr, uint8_t *buffer, uint32_t length)

{

  memcpy(buffer, (void *)addr, length);

 

  return length;

}


关键字:STM32f103  内部flash  读写 引用地址:STM32f103 —— 内部flash读写

上一篇:STM32f103 —— can通信
下一篇:STM32 —— 多路DAC(输出电压和正弦波)

推荐阅读最新更新时间:2024-11-17 17:28

STM32F103使用硬件i2c作为从机模式
一、简单说明 本例子参考了ST官方历程,官方历程的链接如下 http://www.st.com/content/st_com/zh/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32094.html 关于i2c的协议这里就不做描述了 关于STM32 i2c的模式可以在中文数据手册中查看 手册中已经描述,该模块默认工作在从模式,要想变为主模式,主要生产一个起始条件。(主模式的代码可以参考野火开发板的硬件i
[单片机]
STM32F103之系统时钟初始化及延迟函数
一、简介 本文以STM32F103编程为例,介绍STM32F103系统时钟初始化及延迟函数编写 二、实验平台 电脑平台:Windows7 64位旗舰 编译软件:Keil5 硬件平台:STM32F103RC 三、版权声明 四、实验前提 1、在进行本文步骤前,请先安装keil5版本;准备好STM32F103RC硬件平台。 五、基础知识 暂无 六、源码地址 暂无 七、关联文章 暂无 八、实验内容 1.初始化系统时钟 /*外部时钟最高72MHz 内部时钟最高64MHz*/ typedef enum{ HAL_CLOCK_HSE_SYS = (unsigned char
[单片机]
RFID芯片T5557及其FSK读写器电路设计
摘要:T5557是兼容e555x的RFID芯片,但又具有与e555x系列芯片不同的新性能。文章着重介绍了T5557的新特点及工作原理,并对其RSK工作模式下读写器的电路设计作了分析,最后给出了D类功放和FSK解调的应用电路。 关键词:RFID T5557 读写器 FSK D类功放 1 T5557的主要特点 T5557的Atmel公司生产的非接触式无源可读写RFID器件,这的工作频率(载波)为125kHz。可兼容e555x系列芯片。T5557芯片具有以下主要特性: *具有75pF的片上谐振电路电容; *7%26;#215;32bit EEPROM数据存储器(包含32bit的密码存储器); *独立的64位可追踪数据存储器
[应用]
STM32F103 基础知识1
一、系统架构 四个驱动单元: --Cortex -M3 内核DCode总线(D-bus)和系统总线(S-bus); --通用DMA1和通用DMA2; 四个被动单元: --内部SRAM; --内部闪存存储器; --FSMC; --AHB到APB 的桥(AHB2APBx),它连接所有的APB设备; ICode总线 --该总线将Cortex -M3 内核的指令总线与闪存指令接口相连接。指令预取在此总线上完成。 DCode总线 --该总线将Cortex -M3 内核的DCode总线与闪存存储器的数据接口相连接(常量加载和调试访问)。 系统总线 --此总线连接Cortex -M3 内核的系统总线(外设总线)到
[单片机]
STM32F103C8T6在Arduino IDE里编程
前言 时代在进步,极客们手上的单片机也从古老的51、PIC变成了AVR、STM32,也出现了各种便捷的开发工具,例如盛极一时的Arduino;不过Atmega328所属的AVR单片机,终究还是老点了,算起来差不多是20年前的主流了,现在流行的是ARM,今天我们就来玩下Arduino与STM32的结合。 经过半天的努力,终于可以让Arduino IDE支持我的32小板子了,STM32的芯片性价比普遍高于arduino里avr的单片机,所以好处就不用多说了。在这分享下这个有趣的玩法,将会使得STM32的编程更加简单,而不会像KEIL里那么的麻烦(不需了解底层的运作),使得新手更加容易上手,话不多说,走起。。。 板子+USB转T
[单片机]
<font color='red'>STM32F103</font>C8T6在Arduino IDE里编程
基于STM32F103设计的智能门锁(支持多种开锁解锁方式)
一、环境介绍 编程软件: keil5 主控MCU: STM32F103ZET6 射频卡读写器: RFID-RC522 步进电机: 28BYJ4 4相5线 蓝牙: ATK-HC05 WIFI: ATK-ESP8266 物联网云平台: 采用腾讯云物联网平台,直接支持微信小程序和手机独立APP控制 完整项目源码下载地址: https://download.csdn.net/download/xiaolong1126626497/19101807 二、功能介绍 这是基于STM32设计的智能锁模型,支持多种开锁方式,详情如下: 1. 门禁卡刷卡开锁:使用RC522射频卡读卡器,读取IC卡卡号和内部数据,验
[单片机]
基于<font color='red'>STM32F103</font>设计的智能门锁(支持多种开锁解锁方式)
K30 Pro读写速度吊打友商,卢伟冰道出真相
据Redmi官方介绍,Redmi K30 Pro所支持的UFS 3.1闪存可提供高达750MB/s的顺序写速度。根据此前JEDEC发布的UFS 3.1规范显示,UFS 3.1在提高写入速度的同时还拥有深度睡眠功能,在产品成本降低的同时可靠性也有所保证,用户体验更佳 Redmi品牌总经理卢伟冰也在微博简单介绍了UFS 3.1和3.0,他表示最近关于UFS 3.1和3.0有很多争论,稍微有点复杂,我努力简单做个解释。 卢伟冰介绍早期的UFS 3.0速度确实不算快,顺序写入最高也就400MB/s左右,而V30 Pro更是只有260MB/s。而今年最新的UFS 3.0将UFS
[手机便携]
K30 Pro<font color='red'>读写</font>速度吊打友商,卢伟冰道出真相
一种安全可靠的IC卡读写器系统
  人们日常生活中经常接触到磁卡和IC卡,它们是根据卡片上的信息载体的不同而划分的。卡片及其读写器都属于人机接口的输入输出设备。磁卡是在卡片上贴一条窄窄的磁带来记录信息的,它主要用于车船票 、信用卡、电话磁卡、旅馆门钥匙等。IC卡则为近几年才出现的新型卡片,在卡片上嵌有IC(E2PROM,有的还有CPU)。由于它保存的信息比较可靠安全、可以高达几万次的读写,所以大量应用于公交车票 、饭票 、保健卡、收费系统等。下面介绍一种以XICOR公司的X76F100为卡片的、用于存取款的IC卡读写器方案。    1 硬件组成   图1为IC卡及其读写器硬件电路图。其中读写器由单片机、键盘、显示、监控电路等部分组成。IC卡采用XICOR公司
[工业控制]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved