首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

STM32 -写入和读取闪存

STM32是一款由STMicroelectronics(意法半导体)开发的32位单片机系列。它具有低功耗、高性能和丰富的外设接口,适用于各种嵌入式应用。STM32系列单片机广泛应用于工业控制、汽车电子、智能家居、医疗设备等领域。

写入和读取闪存是STM32单片机中常见的操作,闪存是一种非易失性存储器,用于存储程序代码和数据。下面是关于STM32写入和读取闪存的详细解释:

写入闪存: 在STM32单片机中,写入闪存通常用于更新程序代码或存储数据。写入闪存的过程可以通过以下步骤完成:

  1. 准备数据:将需要写入闪存的数据准备好,可以是程序代码或其他数据。
  2. 解锁闪存:由于闪存是只读的,需要先解锁闪存才能进行写入操作。解锁闪存的方法因不同的STM32系列而异,可以通过相关的库函数或寄存器操作完成。
  3. 擦除闪存扇区:闪存被划分为多个扇区,每个扇区的大小通常为几十KB或几百KB。在写入新的数据之前,需要先擦除要写入的扇区。擦除操作会将扇区中的所有数据清除为初始状态。
  4. 写入数据:将准备好的数据写入到闪存的指定地址中。写入操作可以按字节、半字(16位)或字(32位)进行。
  5. 锁定闪存:在数据写入完成后,可以将闪存重新锁定,以保护数据的完整性和安全性。

读取闪存: 读取闪存是从闪存中获取存储的程序代码或数据。读取闪存的过程可以通过以下步骤完成:

  1. 访问闪存地址:确定要读取的闪存地址,可以是程序代码的入口地址或存储数据的地址。
  2. 读取数据:通过读取闪存地址,将存储在该地址的数据读取到处理器的寄存器或内存中。

在STM32单片机中,可以使用相关的库函数或寄存器操作来实现闪存的写入和读取。此外,STMicroelectronics还提供了一系列与STM32单片机兼容的开发工具和软件库,以简化开发过程并提高效率。

腾讯云相关产品和产品介绍链接地址: 腾讯云提供了丰富的云计算服务和解决方案,适用于各种应用场景。以下是腾讯云与云计算相关的产品和产品介绍链接地址:

  1. 云服务器(ECS):提供灵活可扩展的云服务器实例,适用于各种计算需求。详情请参考:https://cloud.tencent.com/product/cvm
  2. 云数据库MySQL:提供高性能、可扩展的云数据库服务,适用于存储和管理数据。详情请参考:https://cloud.tencent.com/product/cdb_mysql
  3. 云存储(COS):提供安全可靠的对象存储服务,适用于存储和管理大规模的非结构化数据。详情请参考:https://cloud.tencent.com/product/cos
  4. 人工智能(AI):提供丰富的人工智能服务和解决方案,包括图像识别、语音识别、自然语言处理等。详情请参考:https://cloud.tencent.com/product/ai
  5. 物联网(IoT):提供全面的物联网解决方案,包括设备连接、数据采集、数据分析等。详情请参考:https://cloud.tencent.com/product/iot

请注意,以上链接仅为腾讯云相关产品的介绍页面,具体的使用方法和操作步骤可以在对应的产品文档中找到。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

stm32型号解读

STM32 F2系列高性能MCU 基于ARM® Cortex™-M3的STM32 F2系列采用意法半导体先进的90 nm NVM制程制造而成,具有创新型自适应实时存储器加速器(ART加速器™)和多层总线矩阵, 实现了前所未有的高性价比。 该系列具有集成度高的特点:整合了1MB Flash存储器、128KBSRAM、以太网MAC、USB 2.0 HS OTG、照相机接口、硬件加密支持和外部存储器接口。 意法半导体的加速技术使这些MCU能够在主频为120 MHz 下实现高达150 DMIPS/398 CoreMark的性能,这相当于零等待状态执行,同时还能保持极低的动态电流消耗水平( 175 μA/MHz)。 带有DSP和FPU指令的STM32 F3系列混合信号MCU STM32 F3系列具有运行于72 MHz的32位ARM Cortex-M4内核(DSP、FPU)并集成多种模拟外设,从而降低应用成本并简化应用设计,它包括:

04

分享STM32 FLASH 擦除(以及防止误擦除程序代码)、写入

编译环境:我用的是(Keil)MDK4.7.2 stm32库版本:我用的是3.5.0 一、本文不对FLASH的基础知识做详细的介绍,不懂得地方请查阅有关资料。   对STM32 内部FLASH进行编程操作,需要遵循以下流程:   FLASH解锁   清除相关标志位   擦除FLASH(先擦除后写入的原因是为了工业上制作方便,即物理实现方便)   写入FLASH   锁定FLASH 实例: #define FLASH_PAGE_SIZE ((uint16_t)0x400) //如果一页为1K大小 #define WRITE_START_ADDR ((uint32_t)0x08008000)//写入的起始地址 #define WRITE_END_ADDR ((uint32_t)0x0800C000)//结束地址 uint32_t EraseCounter = 0x00, Address = 0x00;//擦除计数,写入地址 uint32_t Data = 0x3210ABCD;//要写入的数据 uint32_t NbrOfPage = 0x00;//记录要擦除的页数 volatile FLASH_Status FLASHStatus = FLASH_COMPLETE;/*FLASH擦除完成标志*/ void main() { /*解锁FLASH*/  FLASH_Unlock(); /*计算需要擦除FLASH页的个数 */  NbrOfPage = (WRITE_END_ADDR - WRITE_START_ADDR) / FLASH_PAGE_SIZE; /* 清除所有挂起标志位 */   FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR); /* 擦除FLASH 页*/  for(EraseCounter = 0; (EraseCounter < NbrOfPage) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)    {    FLASHStatus = FLASH_ErasePage(WRITE_START_ADDR + (FLASH_PAGE_SIZE * EraseCounter));    } /* 写入FLASH */  Address = WRITE_START_ADDR;  while((Address < WRITE_END_ADDR) && (FLASHStatus == FLASH_COMPLETE))    {    FLASHStatus = FLASH_ProgramWord(Address, Data);    Address = Address + 4;    } /* 锁定FLASH */  FLASH_Lock(); } 二、FLASH 擦除(以及防止误擦除程序代码) 1、擦除函数 FLASH_Status FLASH_ErasePage(u32 Page_Address)只要()里面的数是flash第xx页中对应的任何一个地址!就是擦除xx页全部内容! 防止误擦除有用程序代码的方法 方法一:首先要计算程序代码有多少,把FLASH存取地址设置在程序代码以外的地方,这样就不会破坏用户程序。原则上从0x0800 0000 + 0x1000 以后的FLASH空间都可以作为存储使用。如果代码量占了 0x3000, 那么存储在 0x0800 0000+ 0x4000 以后的空间就不会破坏程序了。 方法二:先在程序中定义一个const 类型的常量数组,并指定其存储位置(方便找到写入、读取位置),这样编译器就会分配你指定的空间将常量数组存入FLASH中。当你做擦除。读写操作时,只要在这个常量数组所在的地址范围就好。   const uint8_t table[10] __at(0x08010000) = {0x55} ;   MDK3.03A开始就支持关键字 __at() 。   需要加#include <absacc.h> 方法三:在程序中定义一个const 类型的常量数组,无需指定其存储位置。只要定义一个32位的变量存储这个数组的FLASH区地址就行。   uint32_t address;//STM32的地址是32位的   const uint8_t imageBuffer[1024] = {0,1,2,3,4,5,6,7};   address = (uint32_t) imageBuffer;/*用强制类型转换的方式,可以把FLASH中存储的imageBuffer[1024]的地址读到RAM中的变量address 里,方便找到写入、读取位

05
领券