STM32教程系列之FLASH

一步一步实现STM32-FOTA系列教程之STM32-FLASH分区说明 一步一步实现STM32-FOTA系列教程之STM32-FLASH分区说明 前言 如果想在 STM32 上面实现 FOTA功能,就需要对 STM32 的 FLASH 分区有一定的了解,要搞明白运行在 STM32 上的固件都是如何在 FLASH 上存储的,才能够非常灵活的实现 FOTA 。本教程是在 STM32F103RCT6 单片机上实现的 FOTA,因此会对这款单片机的片上FLAH分区进行说明。 ... 阅读详情
  一、实现的功能
1.实现对STM32Fxxx的片内FLASH的擦除和烧写,并读出后进行检验。
2.用串口打印出检验FLASH内容是否正确的变量值。
二、实验操作及现象
1.双击FLASH.eww打开工程文件,然后进行编译。
2.用Flash Loader将程序下载到ARM内,或者利用JLINK等仿真器进行仿真。
3.在程序运行前,用串口线将开发板的串口1和PC机的串口1连接,并打开“串
口调试助手”,设置波特率为115200,将会看到每0.5秒显示一次“Flash Status=1”,
则说明FLASH操作成功,否则说明FLASH操作失败。
三、片内FLASH学习
大家可能会疑惑,既然我们可以利用工具将代码下载芯片内部,为什么还要讲解Flash编程呢?目的是让大家掌握后可以编写自己的BootLoader,例如用CAN总线接口来更新产品中的升级代码,不需要将产品拆卸即可完成。另外一个很重要的问题就是我们要保护好自己编写的代码,否则被破_解后,就成别人的产品了。
1.解除Flash锁   
复位后,闪存擦写控制器模块是被保护的,不能写入FLASH_CR寄存器,
通过写入两个关键字(KEY1,KEY2)到FLASH_KEYR寄存器打开闪存擦写控
制器,才可以进行其他闪存操作。其中KEY1为0x45670123,KEY2为0xCDEF89AB。
编程如下:
FLASH->KEYR = FLASH_KEY1;
   FLASH->KEYR = FLASH_KEY2;
2.页擦除
在FLASH操作中,每次擦除只能擦除一页,不能一个字节一个字节的擦除,其实所谓的擦出就是将指定的页全部填写成0XFF,下面是页擦除的过程:
   -检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作;
   -用FLASH_AR寄存器选择要擦除的页;
   -设置FLASH_CR寄存器的PER位为1;
   -设置FLASH_CR寄存器的STRT位为1;
   -等待BSY位变为0;
   -读出被擦除的页并做验证。
编程如下:
//等待前次操作完毕(检查FLASH_SR寄存器的BSY位)
  status = FLASH_WaitForLastOperation(EraseTimeout);
  
  if(status == FLASH_COMPLETE)//如果FLASH处于可以操作状态,开始进行页擦除操作
  { 
    
    FLASH->CR|= CR_PER_Set;//设置FLASH_CR寄存器的PER位为1
    FLASH->AR = Page_Address;//用FLASH_AR寄存器选择要擦除的页
    FLASH->CR|= CR_STRT_Set;//设置FLASH_CR寄存器的STRT位为1
    
    //等待擦除操作完毕(等待BSY位变为0)
    status = FLASH_WaitForLastOperation(EraseTimeout);

    if(status != FLASH_BUSY)//如果SR的BSY为0
    {
      //如果擦除操作完成,禁止CR的PER位
      FLASH->CR &= CR_PER_Reset;
    }
  }
3. 全部擦除
全部擦除就是将全部FLASH都填写成0xFF,其过程如下:
   -检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作;
   -设置FLASH_CR寄存器的MER位为1;
   -设置FLASH_CR寄存器的STRT位为1;
   -等待BSY位变为0;
   -读出所有页并做验证。
编程如下: 
//等待前次操作完毕(检查FLASH_SR寄存器的BSY位)
  status = FLASH_WaitForLastOperation(EraseTimeout);
  
  if(status == FLASH_COMPLETE)//如果FLASH出于可以操作状态,开始进行全部页擦除操作
  {
     FLASH->CR |= CR_MER_Set;//设置FLASH_CR寄存器的MER位为1
     FLASH->CR |= CR_STRT_Set;//设置FLASH_CR寄存器的STRT位为1
    
    //等待全部页擦除操作完毕(等待BSY位变为0)
    status = FLASH_WaitForLastOperation(EraseTimeout);

    if(status != FLASH_BUSY)//如果SR的BSY为0
    {
      //如果擦除操作完成,禁止CR的PER位
      FLASH->CR &= CR_MER_Reset;
    }
  }    
4. 编程
   编程就是将数据写入指定的FLASH地址,STM32的FLASH每次编程都是16位(在32位系统中,我们叫做半字),过程如下:
-检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的编程操作;
   -设置FLASH_CR寄存器的PG位为1;
   -写入要编程的半字到指定的地址;
   -等待BSY位变为0;
   -读出写入的地址并验证数据。
编程如下:
//检查参数是否正确
  assert_param(IS_FLASH_ADDRESS(Address));

  //等待前次操作完毕(检查FLASH_SR寄存器的BSY位)
  status = FLASH_WaitForLastOperation(ProgramTimeout);
  
  if(status == FLASH_COMPLETE)//如果FLASH处于可以操作状态,开始进行编程操作
  {
    
    FLASH->CR |= CR_PG_Set;//设置FLASH_CR寄存器的PG位为1
  
    *(vu16*)Address = Data;//写入要编程的半字到指定的地址
    //等待半字编程操作完毕(等待BSY位变为0)
    status = FLASH_WaitForLastOperation(ProgramTimeout);

    if(status != FLASH_BUSY)
    {
      //如果半字编程完毕,禁止PG位
      FLASH->CR &= CR_PG_Reset;
    }
  }
5. 信息块擦除
   信息块的擦除主要是指对选择字节的擦除,选择字节组织如下:

  (原文件名:option.JPG) 
引用图片
 
RDP:读出保护选择字节
读出保护功能帮助用户保护存在闪存中的软件。该功能由设置信息块中的一个选择字节启用。写入正确的数值(RDPRT键=0x00A5)到这个选择字节后,闪存被开放允许读出访问。
USER:用户选择字节
这个字节用于配置下列功能:
− 选择看门狗事件:硬件或软件
− 进入停机(STOP)模式时的复位事件
− 进入待机模式时的复位事件
Data:用户数据,可由用户自己分配
WRPx:闪存写保护选择字节
用户选择字节WRPx中的每个位用于保护主存储器中4页的内容,每页为1K字节。总共有4个用户选择字节用于保护所有128K主闪存。
其擦除的过程如下:
-检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作;
   -解除FLASH_CR寄存器的OPTWRE位;
   -设置FLASH_CR寄存器的OPTER位为1;
   -设置FLASH_CR寄存器的STRT位为1;
   -等待BSY位变为0;
   -读出小信息块并做验证。
编程过程如下:
//等待前次操作完毕(检查FLASH_SR寄存器的BSY位)
  status = FLASH_WaitForLastOperation(EraseTimeout);

  if(status == FLASH_COMPLETE)//如果FLASH处于可以操作状态,开始进选择字节擦除操作
  {
    //解锁 CR寄存器中的OPTWRE位 
    FLASH->OPTKEYR = FLASH_KEY1;//输入选择字节键1
    FLASH->OPTKEYR = FLASH_KEY2;//输入选择字节键2
    
    FLASH->CR |= CR_OPTER_Set;//设置FLASH_CR寄存器的OPTER位为1
    FLASH->CR |= CR_STRT_Set;//设置FLASH_CR寄存器的STRT位为1

    //等待选择字节擦除操作完毕(等待BSY位变为0)
    status = FLASH_WaitForLastOperation(EraseTimeout);
    
    if(status == FLASH_COMPLETE)//如果选择字节擦除操作完毕
    {
      //如果擦除操作完毕,禁止OPTER位
      FLASH->CR &= CR_OPTER_Reset;
       
      //使能选择字节编程操作
      FLASH->CR |= CR_OPTPG_Set;

      //使能读出访问
      OB->RDP= RDP_Key; //选择字节擦除同时需要开放代码读出

      //等待前次操作完毕
      status = FLASH_WaitForLastOperation(ProgramTimeout);
 
      if(status != FLASH_BUSY)//如果前次操作结束
      {
        //如果编程操作完毕,禁止OPTPG位
        FLASH->CR &= CR_OPTPG_Reset;
      }
    }
6. 选择字节编程
   选择字节的编程就是向上面讲到的选择字节里面写入指定的数据,其过程如下:
-检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的编程操作;
   -解除FLASH_CR寄存器的OPTWRE位;
   -设置FLASH_CR寄存器的OPTPG位为1;
   -写入要编程的半字到指定的地址;
   -等待BSY位变为0;
   -读出写入的地址并验证数据。
编程过程如下:
//等待前次操作完毕(检查FLASH_SR寄存器的BSY位)
  status = FLASH_WaitForLastOperation(ProgramTimeout);

  if(status == FLASH_COMPLETE)//如果FLASH处于可以操作状态,开始进行编程操作
  {
    //解锁 CR寄存器中的OPTWRE位
    FLASH->OPTKEYR = FLASH_KEY1;
    FLASH->OPTKEYR = FLASH_KEY2;
   
    FLASH->CR |= CR_OPTPG_Set;//设置FLASH_CR寄存器的OPTPG位为1
    *(vu16*)Address = Data;//写入要编程的半字到指定的地址
    
    //等待半字编程操作完毕(等待BSY位变为0)
    status = FLASH_WaitForLastOperation(ProgramTimeout);

    if(status != FLASH_BUSY)
    {
      //如果半字编程完毕,禁止OPTPG位
      FLASH->CR &= CR_OPTPG_Reset;
    }
  } 
7.STM32的代码保护
通过选择字节的设置,可以实现代码的读保护和写保护,在上面6中讲到的,RDP和WRP分别是读保护和写保护,将RDP设置指定的数值,可以实现代码的读保护,也就是不允许任何设备读取FLASH里面的应用代码,将WRP里设置指定的数值,可以实现代码的写保护,不允许任何设备改写FLASH里面的应用代码。其中设置读保护的代码如下:
//等待前次操作完毕(检查FLASH_SR寄存器的BSY位)
  status = FLASH_WaitForLastOperation(EraseTimeout);

  if(status == FLASH_COMPLETE)//如果FLASH处于可以操作状态,开始进行指定操作
  {
    //解锁 CR寄存器中的OPTWRE位
    FLASH->OPTKEYR = FLASH_KEY1;
    FLASH->OPTKEYR = FLASH_KEY2;
    //擦除整个选择字节区域
    FLASH->CR |= CR_OPTER_Set;
    FLASH->CR |= CR_STRT_Set;

    //等待擦除操作完毕
    status = FLASH_WaitForLastOperation(EraseTimeout);

    if(status == FLASH_COMPLETE)//如果擦除操作完毕
    {
      //禁止OPTER位
      FLASH->CR &= CR_OPTER_Reset;

      //使能选择字节编程操作
      FLASH->CR |= CR_OPTPG_Set; 

      if(NewState != DISABLE)//禁止读出操作
      {
        OB->RDP = 0x00;
      }
      else//使能读出操作
      {
        OB->RDP = RDP_Key;  
      }

      //等待写入完毕
      status = FLASH_WaitForLastOperation(EraseTimeout); 
    
      if(status != FLASH_BUSY)
      {
        //写入操作完毕,禁止OPTPG位
        FLASH->CR &= CR_OPTPG_Reset;
      }
}
写保护代码如下:
//等待前次操作完毕(检查FLASH_SR寄存器的BSY位)
  status = FLASH_WaitForLastOperation(ProgramTimeout);
  
  if(status == FLASH_COMPLETE)//如果FLASH处于可以操作状态,开始进行编程操作
  {
    //解锁 CR寄存器中的OPTWRE位
    FLASH->OPTKEYR = FLASH_KEY1;
    FLASH->OPTKEYR = FLASH_KEY2;
    //设置FLASH_CR寄存器的OPTPG位为1
    FLASH->CR |= CR_OPTPG_Set;

    if(WRP0_Data != 0xFF)//如果不是全部不写保护
    {
      OB->WRP0 = WRP0_Data;//写入WRP0
      
      //等待写入操作完毕
      status = FLASH_WaitForLastOperation(ProgramTimeout);
    }
    if((status == FLASH_COMPLETE) && (WRP1_Data != 0xFF))
    {
      OB->WRP1 = WRP1_Data;
      
      //等待写入操作完毕
      status = FLASH_WaitForLastOperation(ProgramTimeout);
    }

    if((status == FLASH_COMPLETE) && (WRP2_Data != 0xFF))
    {
      OB->WRP2 = WRP2_Data;
      
      //等待写入操作完毕
      status = FLASH_WaitForLastOperation(ProgramTimeout);
    }
    
    if((status == FLASH_COMPLETE)&& (WRP3_Data != 0xFF))
    {
      OB->WRP3 = WRP3_Data;
     
      //等待写入操作完毕
      status = FLASH_WaitForLastOperation(ProgramTimeout);
    }
          
    if(status != FLASH_BUSY)
    {
      //如果编程操作完毕,禁止OPTPG位
      FLASH->CR &= CR_OPTPG_Reset;
    }
  }    
8.STM32有3种启动模式:
第1种:上电前BOOT0脚为0,BOOT1脚是0或者1,上电后直接进入FLASH执行应用程序。
第2种:上电前BOOT0脚为1,BOOT1脚为0,上电后进入芯片的自举程序(LOADER代码,厂家写好固化到芯片里的专门用于串口下载代码的程序),一般我们烧写程序的时候进入此模式。
第3种:上电前BOOT0脚为1,BOOT1脚为1,上电后进入芯片的SRAM,一般我们很少使用这个模式
四、程序流程分析
程序流程见附件《STM32例程之FLASH流程图.pdf》
五、代码例程(不包括库文件)
程序的IAR例程工程见附件“FLASH.rar”
点击此处下载  ourdev_604189GXBJQ5.pdf(文件大小:38K)  (原文件名:STM32例程之FLASH流程图.pdf) 
点击此处下载  ourdev_604190LP4GFP.rar(文件大小:223K)  (原文件名:FLASH.rar) 
一步一步实现STM32-FOTA系列教程之BIN文件解包 一步一步实现STM32-FOTA系列教程之BIN文件解包 文章系列链接 1、《一步一步实现STM32-FOTA系列教程之bin文件生成》 2、《一步一步实现STM32-FOTA系列教程之STM32-FLASH分区说明》 3、《一步一步实现STM32-FOTA系列教程之FLASH静态区读写》 4、《一步一步实现STM32-FOTA系列教程之Bootloader编写》 前言 上一篇文章一步一步实现ST... 阅读详情

相关推荐

STM32 Flash分区说明 - 实现STM FOTA系列教程

Flash分区是将Flash存储器划分为多个逻辑区域,每个区域用于特定的用途,例如存储固件、配置数据和用户数据。本文介绍了STM32 Flash分区的说明,并提供了相应的源代码示例,通过合理划分Flash分区,我们可以实现STM32的固件升级。固件升级是通过将新的固件写入Flash的固件区来实现的。固件升级是通过将新的固件写入Flash的固件区来实现的。下面是一个简单的链接脚本示例,用于将Flash划分为两个区域:固件区和数据区。上述函数可以将数据写入Flash的数据区,并从数据区读取数据。

ZwcCsharp的博客 1344

STM32读写内部Flash(介绍+附代码)

概述 内部flash读写详解 一、介绍 首先我们需要了解一个内存映射: stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同。 RAM起始地址是0x2000 0000,结束地址是0x2000 0000加上芯片的RAM大小。不同的芯片RAM也不同。 Flash中的内容一般用来存储代码和一些定义为const的数据,断电不丢失, RAM可以理解为内存,用来存储代码运行时的数据,变量等等。掉电数据丢失...

qq_36075612的博客 5万+

LORA-STM32开发系列教程一FLASH读写

不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了1024K 字节。STM23 的 FLASH 写入过程如图所示。不过新大陆已经帮我们封装好库了,直接调用就行。

m0_53608652的博客 420

【读写内部Flsah】

STM32的内部Flash不仅掉电数据不丢失,还具有快速存储的特性。在内部Flash中,不仅可以存储程序,还可用于紧急情况下保留有限数据的作用。之前在项目中曾遇到过向STM32的内部Flash写入1800个字节数据的需求,下面我们就一起来看一下内部Flash的相关知识。相信通过对内部Flash结构、相关注意事项及库函数的讲解,大家对内部Flash有了更深刻的了解,大家动起手来,实践一下吧。...

iheqing666的博客 1041

基于STM32的Flash读写详解

本文主要介绍STM32多种的内部Flash读写方式和读写长文件的功能函数怎样编写。阅读完本文可以使你能够正常的完成Flash读写操作。介绍 STM32 FLASH 闪存的编程和擦除 Flash读写的标准库函数 软件设计 FLASH的读取 直接读取某一地址的内容 读取选定位置的选定大小的内容 FLASH的写入 直接使用标准库写入 写入选定位置的选定大小的内容 如何在Keil 5中查看Flash某地址的内容...

1万+

香橙派5b 移植 imx415

修改设备树,以为例,关闭ov13855,添加imx4151;0;1;0;1;0;1;0;1;0;1;0;1;0;以此类推,修改三个dtsi。

ChenYX的博客 4531

stm32 f103 c8t6 验证内部flash掉电保存功能,用keil5 debug时发现运行到擦除函数时 程序会卡死,发现是时钟配置影响

只要跑进这句 status = FLASH_WaitForLastOperation(EraseTimeout);,直接崩掉debug。

threcheng的博客 728

SPI 协议帧格式深度解析:从 8 位数据到 16 位扩展的 3 种模式

本文深入解析SPI协议的帧格式,涵盖从8位标准到16位扩展的三种模式。通过详细讲解SPI时钟模式、数据宽度配置及实际应用案例,帮助开发者掌握SPI外设的深度定制能力,提升嵌入式系统开发效率。特别适用于连接传感器、存储器和显示器等高速通讯场景。

weixin_34110749的博客 345

STM32 写Flash进入HardFault_Handler,一次解决经验分享

问题描述: 在执行写flash操作(以下函数)的时候, FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) { FLASH_Status status = FLASH_COMPLETE; /* Check the parameters */ assert_param(IS_FLASH_PROGRAM_...

tiantangmoke的博客 1万+

【正点原子I.MX6U-MINI移植篇】Ubuntu-base根文件系统移植构建过程详解(四)

能不能在ARM板上运行Ubuntu呢?答案肯定是可以的,Ubuntu是Linux系统的一种,可以简单的将Ubuntu理解为一个根文件系统,和我们用busybox、buildroot制作的根文件系统一样。因此移植Ubuntu也就是将Ubuntu根文件系统移植到我们的开发板上。

果果小师弟的博客 3767

飞书+扣子+DeepSeek三件套:5分钟搞定公众号文章批量改写(附完整配置截图)

本文详细介绍了如何利用飞书、扣子和DeepSeek三款工具,无需编程即可搭建一个高效的公众号文章批量改写自动化工作流。通过飞书多维表格管理链接与成果,扣子平台串联整个流程,并调用DeepSeek智能体进行内容润色与改写,实现从内容抓取到智能处理的完整自动化,大幅提升新媒体运营效率。

python9snake的博客 208

STM32G070系列芯片擦除、写入Flash错误解决

在用G070KBT6芯片调用HAL_FLASHEx_Erase(&EraseInitStruct, &PageError)时,调试发现该函数返回HAL_ERROR,最后定位到FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE)函数出现错误,pFlash.ErrorCode为0xA0,即FLASH错误标志位 FLASH_SR_PGSERR和FLASH_SR_PGAERR被置位;在网上找半天找不到问题原因,最后在。

qq_48211392的博客 2629

技术解析:PETR如何通过3D位置编码革新多视角3D目标检测

本文深入解析了PETR模型如何通过创新的3D位置编码技术革新多视角3D目标检测。它摒弃了DETR3D复杂的投影采样机制,通过3D坐标生成器和编码器,将3D几何信息直接注入2D图像特征,构建出3D感知特征。该方法简化了流程,提升了模型对空间关系的理解能力与训练稳定性,为自动驾驶等领域的精准感知提供了新思路。

weixin_29079743的博客 212

一步一步实现STM32-FOTA系列教程之FLASH静态区读写

一步一步实现STM32-FOTA系列教程之FLASH静态区读写 文章系列链接 《一步一步实现STM32-FOTA系列教程之bin文件生成》 《一步一步实现STM32-FOTA系列教程之STM32-FLASH分区说明》 前言 在上一篇文章《一步一步实现STM32-FOTA系列教程之STM32-FLASH分区说明》中,对STM32的FLASH进行了人为了分区,分成了 Bootloader分区、主分区、...

飘雪冰峰的博客 3952

为什么RingMo能成为遥感领域的首个生成式自监督基础模型?

RingMo作为遥感领域首个生成式自监督基础模型,通过创新的图像掩码建模技术解决了传统方法在遥感图像处理中的挑战。该模型利用两百万张多元数据集进行预训练,在小目标检测、场景分类等任务上表现卓越,显著提升了性能指标。RingMo的技术突破为遥感图像解译提供了高效解决方案,降低了标注成本并增强了模型泛化能力。

ll5678的博客 691

实干派!网易易盾增强版滑块验证码,全方位讲解识别思路(含源码)

该验证码是异形滑块验证码中的一种,缺口旋转+偏移的处理需要你有很好的图像处理知识,能很好的处理透明通道,同时,该验证码需要你能很好的处理缺口和背景之间匹配的关系,该验证码的处理难点就是两个缺口之间如何找到正确的,两个检测框都有很强的相似度,且加上背景图的干扰,在图像处理和有优化上难度大大增加。

码王吴彦祖的博客 2015

STM32cubeMx系列小白学习教程(九)—— Flash读写

Flash(快闪存储器)是一种非易失性存储器,用于存储数据和程序代码。它是一种闪存技术,可以在断电情况下保持数据的完整性,因此非常适合用于嵌入式系统和其他需要长期存储数据和程序的应用。非易失性:Flash存储器可以在断电情况下保持数据的完整性,不需要外部电源维持数据。可擦写和可编程:Flash存储器可以被擦除和编程,允许修改存储的数据和程序。高密度:Flash存储器具有高存储密度,可以存储大量的数据和程序代码。

weixin_49249873的博客 3689

【图像去噪】论文复现:降维打击!图像对输入变成像素对输入!Pytorch实现Noise2Void(N2V),基于U-Net模型训练,简洁明了理解N2V核心思想!附训练好的灰度图和RGB图的模型文件!

论文题目:Noise2Void-Learning Denoising from Single Noisy Images —— Noise2Void -从单个噪声图像中学习去噪【图像去噪】论文精读:Noise2Void-Learning Denoising from Single Noisy Images(N2V)由于源码是tensorflow版本,本文将基于Pytorch复现。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1355

stm32变量放在flash_CubeMX系列教程——20 STM32内部Flash

有的时候我们会需要 在系统中保存一些参数,这个时候我们可以使用STM32内部的闪存Flash,即使断电参数也不会丢失。查看STM32的参考手册,STM32F407中介绍了flash的特性,本实验开发板使用的flash是1M容量大小。flash的扇区和块基址如下图本章节使用串口打印工程,打开工程,添加扇区代码定义保存的flash的开始地址定义保存flash的结束地址定义要在flash中保存...

weixin_39947812的博客 746

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

STM32系列教程之FLASH学习

一、实现的功能 1.实现对STM32Fxxx的片内FLASH的擦除和烧写,并读出后进行检验。 2.用串口打印出检验FLASH内容是否正确的变量值。 二、实验操作及现象 1.双击FLASH.eww打开工程文件,然后进行编译。 2.用Flash Loader将程序下载到ARM内,或者利用JLINK等仿真器进行仿真。 3.在程序运行前,用串口线将开发板的串口1和PC机的串口1连接,并打开“串

u011717322的专栏 1330

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

CubeMX系列教程——20 STM32内部Flash

有的时候我们会需要 在系统中保存一些参数,这个时候我们可以使用STM32内部的闪存Flash,即使断电参数也不会丢失。查看STM32的参考手册,STM32F407中介绍了flash的特性...

weixin_46158019的博客 1238

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

STM32CubeMX系列教程9:FLASH读写及HardFault_Handler报错

  这章记录STM32F103C8T6的Flash进行程序内读写操作。程序源码基于STM32CubeMX系列教程8:配置工程模板(串口+不定长数据收发+DMA+IDLE中断+软中断)工程,在工程中添加Flash读写的驱动文件。通过调用调试好的读写API完成Flash的读写操作。

小白的学习笔记 4066

一步一步实现STM32-FOTA系列教程之Bootloader编写

一步一步实现STM32-FOTA系列教程之Bootloader编写 文章系列链接 《一步一步实现STM32-FOTA系列教程之bin文件生成》 《一步一步实现STM32-FOTA系列教程之STM32-FLASH分区说明》 《一步一步实现STM32-FOTA系列教程之FLASH静态区读写》 前言 上一篇文章《一步一步实现STM32-FOTA系列教程之FLASH静态区读写》实现了对FLASH静态区读写...

飘雪冰峰的博客 7052

使用STM32cubeMX/STM32cube ide 生成FatFS代码操作SPI FLASHw25Qxx

使用STM32cubeMX/STM32cube ide 生成FatFS代码操作SPI FLASHw25Qxx 去发现同类优质开源项目:https://gitcode.com/ 本仓库提供了一套使用STM32cubeMX和STM32cube ide生成FatFS代码,以操作SPI FLASH(w25Qxx系列)的详细教程和资源文件。 功能简介 使用STM32cubeMX配置STM32微控制器,生成...

gitblog_06772的博客 825

STM32cubeMX配置F103的硬件SPI读写W25QXX的FLASH:项目推荐

STM32cubeMX配置F103的硬件SPI读写W25QXX的FLASH:项目推荐 去发现同类优质开源项目:https://gitcode.com/ 在现代嵌入式系统开发中,快速高效地配置硬件接口成为开发者的关键需求。本文将为您详细介绍一个开源项目:STM32cubeMX配置F103的硬件SPI读写W25QXX的FLASH。以下是项目的核心功能及详细介绍,帮助您更好地了解并使用这一资源。 项目介...

gitblog_06703的博客 1002

使用STM32cubeMXSTM32cubeide生成FatFS代码操作SPIFLASHw25Qxx:项目核心功能与深度解析

使用STM32cubeMXSTM32cubeide生成FatFS代码操作SPIFLASHw25Qxx:项目核心功能与深度解析 去发现同类优质开源项目:https://gitcode.com/ 在嵌入式开发领域,STM32cubeMX与STM32cubeide的结合使用,为工程师们提供了强大的开发工具。今天,我们就来详细介绍一下如何使用这两个工具生成FatFS代码,以操作SPI FLASH(w25Q...

gitblog_06762的博客 1058
上一篇: wxWidgets主窗口最大化启动
下一篇: STM32的USB上位机(VC++源码),动态库(VC++源码),STM32端原代码,驱动程序,全套源码
embededvc
博客等级 码龄21年 176粉丝 41原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值