gpt4 book ai didi

c - 了解STM32引用手册中的写入flash流程

转载 作者:行者123 更新时间:2023-12-04 12:05:33 25 4
gpt4 key购买 nike

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

Perform the data write operation at the desired memory address

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

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

哈利

最佳答案

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

STM 自己的 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);
}

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

关于c - 了解STM32引用手册中的写入flash流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57058410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com