了解STM32参考手册中的写入flash流程

     2023-02-19     155

关键词:

【中文标题】了解STM32参考手册中的写入flash流程【英文标题】:Understanding the writing to flash process in the STM32 reference manual 【发布时间】:2019-11-25 06:11:39 【问题描述】:

我正在对 stm32l412kb 进行编程,有一次我会将数据写入闪存(从 UART)。从 stm32l41xx reference manual,我了解了在写入之前如何清除内存的步骤,但是在第 84 页上,有一个步骤我在写入实际数据时不知道该怎么做。这一步是

在想要的内存地址进行数据写入操作

它提到了什么数据写入操作?我看不到内存地址所在的任何寄存器,所以我假设它会使用指针?我该怎么做呢?

非常感谢您的帮助, 非常感谢,

哈利

【问题讨论】:

在我看来,这些术语有歧义:通常对 Flash 的写操作包括:1) 擦除扇区(如果需要) 2) 编程一个字(或 2 个字),意思是清除内存中的一位或几位。 【参考方案1】:

除了一些事情(例如,仅在擦除后写入、时序、对齐、锁定/解锁)之外,写入 RAM 和写入 FLASH 存储器之间并没有太大区别。因此,如果您已按照参考手册中的步骤操作并且闪存已准备就绪(即已清除和解锁),那么您只需获取对齐的内存地址并写入即可。

STMs 自己的 HAL 库包含一个函数,它为您完成所有繁琐的样板文件并允许您“只写”:

HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data)

这个函数在内部使用一个执行实际写入的子程序,它看起来像这样:

static void FLASH_Program_DoubleWord(uint32_t Address, uint64_t Data)

  /* Check the parameters */
  assert_param(IS_FLASH_PROGRAM_ADDRESS(Address));

  /* Set PG bit */
  SET_BIT(FLASH->CR, FLASH_CR_PG);

  /* Program first word */
  *(__IO uint32_t*)Address = (uint32_t)Data;

  /* Barrier to ensure programming is performed in 2 steps, in right order
    (independently of compiler optimization behavior) */
  __ISB();

  /* Program second word */
  *(__IO uint32_t*)(Address+4U) = (uint32_t)(Data >> 32);

如您所见,其中不涉及魔法。它只是一个取消引用的指针和一个赋值。

【讨论】:

你不能说写入 RAM 和 FLASH 没有太大区别。 Flash 扇区需要擦除,根据您必须注意在与您正在执行的扇区(或存储库)不同的扇区(或存储库)中进行编程的产品,在 STM32L4 上,您一次只能编程 64 位,您必须在对数据总线进行写访问之前,在 Flash 控制器寄存器中设置一个或多个位......但是你是对的,最后写入是由相同的 C(或汇编)指令引发的。【参考方案2】:

它提到了什么数据写入操作?

“数据写入”只是对闪存中的内存地址的正常写入。它通常是STR 汇编指令。筛选您的数据表,我猜闪存地址在 0x08080000 和 0x00080000 之间。

例如。以下 C 代码会将值 42 写入第一个闪存地址:

 *(volatile uint32_t*)0x00080000 = 42.

参考实现可以看stm32 hal drivers:

  /* Set PG bit */
  SET_BIT(FLASH->CR, FLASH_CR_PG);

  /* Program the double word */
  *(__IO uint32_t*)Address = (uint32_t)Data;
  *(__IO uint32_t*)(Address+4) = (uint32_t)(Data >> 32);

【讨论】:

我认为您的第一个示例不起作用,因为只能编程双字(2 x 32 数据)。因此,您还需要写入接下来的四个字节:*(volatile uint32_t*)0x00080004 = 0;

如何写入STM32 Flash

】如何写入STM32Flash【英文标题】:HowtowritetoSTM32Flash【发布时间】:2019-06-0703:49:58【问题描述】:我想从我的用户代码写入STM32F407VGT的闪存扇区11以存储一些数据。我使用了stm32f4xx_hal_flash.c库。我首先使用此代码擦除扇区:voidFlas... 查看详情

stm32 flash半页写入

】stm32flash半页写入【英文标题】:stm32flashhalfpagewriting【发布时间】:2016-07-1118:56:05【问题描述】:当我在stm32微控制器上执行从闪存到闪存的半页写入时,我是否需要一个RAM缓冲区来保存这些读取值然后再写入它们?我的意思... 查看详情

在STM32上写Flash

...10x微控制器中的EEPROM仿真)。那里和相应的数据表和编程手册(PM0075)中的基本概述非常清楚。但是,我不确定断电/系统复位对闪存编程和页面擦除操作的影响。AppNote也考虑了这 查看详情

STM32 Flash 写入导致多个 HardFault 错误

】STM32Flash写入导致多个HardFault错误【英文标题】:STM32FlashWritecausesmultipleHardFaultErrors【发布时间】:2021-07-2908:24:51【问题描述】:我正在尝试将几个字节的数据写入STM32F410CBT3闪存扇区4(大小为64KB),我选择了这个扇区并假设它... 查看详情

如何读取stm32flash里面的内容

...绝对地址转化为相应指针,然后取指针指向位置的数据。参考技术A找个例程,参考固件库和芯片手册自己研究一下,最后的效果要好一些。只能建议这些。本回答被提问者和网友采纳 参考技术B可以对照原子stm32的例程 参考技术... 查看详情

fmc—扩展外部sdram

...SDRAM芯片的具体参数,请参考其规格书《IS42-45S16400J》来了解。SDRAM控制原理STM32控制器芯片内部有一定大小的SRAM及FLASH作为内存和程序存储空 查看详情

将全局声明的缓冲区写入 FLASH 时出现 STM32 Hardfault 异常

】将全局声明的缓冲区写入FLASH时出现STM32Hardfault异常【英文标题】:STM32HardfaultexceptionwhenwritinggloballydeclaredbuffertoFLASH【发布时间】:2017-06-1300:49:30【问题描述】:我正在尝试为STM32F030x8编写引导加载程序应用程序。我通过UART将bi... 查看详情

STM32L476 flash 页擦除没有效果

...:34【问题描述】:我有一个问题,我尝试将值写入STM32L476中的闪存页(第256页@0x08080000)。但是,我在闪存状态寄存器中设置了PROGERR错误。这意味着尝试将非零值写入未擦除到0xFFFFFFFF的闪存位置。我确实像这样擦除闪存:uint32_t... 查看详情

stm32相关手册使用记录

...册三、手册内容3.1数据手册3.1.1查看外设挂载哪条总线3.2参考手册3.2.1查看芯片flash页大小,最小操作单位3.3编程手册3.4勘误手册一、概述当选用一款MCU后,进行开发前肯定要先拿到对应的手册。做固件开发,和硬件芯... 查看详情

第26章fmc—扩展外部sdram

...验中SDRAM芯片的具体参数,请参考其规格书《W9825G6KH》来了解。26.1 SDRAM控制原理STM32控制器芯片内部有一定大小的SRAM及FLASH作为内存和程序存储空 查看详情

stm32学习及应用笔记一:systick定时器学习及应用

...CU,对ARM内核的SysTick计时器也经常使用,但几乎没有仔细了解过。最近正好要在移植一个新的操作系统时接触到了这块,据比较深入的了解了一下。1、SysTick究竟是什么?关于SysTick在STM32的资料中并没有详细的介绍,这可能由于S... 查看详情

急求毕业设计问题,stm32中的boot0管脚有啥用啊?

...板子了的话,直接根据数据手册拉高低来选择启动好了。参考技术Aboot0选择芯片的启动的从ram启动还是flash还是……资料里有介绍。boot0和boot1组合有不同的选择你可以参考datasheet 查看详情

stm32f407开发板用户手册第10章stm32f407的flash,ram和栈使用情况(map和htm文件)

最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255第10章      STM32F407的FLASH,RAM和栈使用情况(map和htm文件)本章为大家介绍编译器生成的map和htm文件进行解析,通过这两个文件可以让大家对工程... 查看详情

stm32f429开发板用户手册第10章stm32f429的flash,ram和栈使用情况(map和htm文件)

最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255第10章      STM32F429的FLASH,RAM和栈使用情况(map和htm文件)本章为大家介绍编译器生成的map和htm文件进行解析,通过这两个文件可以让大家对工程... 查看详情

stm32的数据手册和技术参考手册的区别

...型用的,一般就是功能描述、技术参数之类的简介。技术参考手册的范围广一点,一般是研发时用的,比如详细的功能描述,运行机制,配置方法,寄存器说明之类的参考技术A技术参考手册比较简单,主要是用来选型用的,一... 查看详情

STM32 - 修改 SYSCFG_UR2 寄存器

...入字段占用的内存地址但都没有奏效。【问题讨论】:【参考方案1】:使用选项字节修改它,参见FLASH_BOOT_PRG中的BOOT_ 查看详情

stm32单片机闪存存储器里存储的是哪些内容?

...烧程序就是靠这部分的代码,用户更改不了这个区域,想了解这个区域就看AN2606文档,optionbytes这个区域是16个字节,是控制flash区域的寄存器,想了解这些寄存器看STM32F10xxx闪存编程参考手册,SRAM这个区域的其实地址始终是0x2000... 查看详情

如何通过stm32将.bin文件刷入外部flash中

...容写入自身内部Flash;应该是这样的,虽然我还没做过。参考技术A使用Jlink,J-Flash,open需要刷入的.bin文件,f7自动下载本回答被提问者和网友采纳 查看详情