STM32Cube学习笔记-内部FLASH读写操作

   今天记录一下使用STM32Cube MX配置单片机,然后对单片机的内部FLASH进行操作的试验。

  硬件:野火STM32F429挑战者开发板;软件:STM32Cube MX、Keil 5

  STM32F4系列的单片机的内部FLASH较大,在写操作时是先擦除扇区,这个和STM32F1系列有所不同;先找到一张图片,是STM32F429IGT6的内部FLASH扇区。

   可以操作的扇区为块1的部分,有0~11总共12个扇区,其中0~3扇区为16Kbits,4扇区为64Kbits,5~11扇区为128Kbits。

   从0x08000000开始是代码开始执行的地址。我们要做的是对第11扇区进行读写操作,写入一个数组,然后在debuge中查找memory该地址上的值;

   FLASH读写基本操作:1、打开FLASH;2、擦除要写入地址所在的扇区;3、把数据写入FLASH对应地址;4、把FLASH关闭。

   由于是内部FALSH的操作,没有涉及到外设,因此可以直接打开原有的工程(见《STM32Cube学习笔记-定时器中断》)。

   在生成的*.h文件中找到有关hal_flash的文件,stm32f4xx_hal_flash.h和stm32f4xx_hal_flash_ex.h。在

stm32f4xx_hal_flash.h中找到了对flash操作的函数,中断函数,操作结束后的回调函数,flash的打开和上锁函数。

在stm32f4xx_hal_flash_ex.h中找到了对扇区擦除的函数。

  我们去main.c中编写一些子函数。

   我写了两个子函数,第一个是擦除扇区的,第二个是写半字,写的也很简单;

   第一个,先把Flash解锁,然后擦除扇区,最后把Flash上锁;

   写一定数据长度的数据,数据为halfword。先解锁,然后循环写。

  然后在main.c中调用这两个函数;

要写的数据是

编译,下载、运行,在memory中查看0x080e0000为起始地址的数据;

可以看到写入的数据是正确的。

上面是对使用STM32CubeMX生成的hal库函数的对FLASH的操作进行了简单的操作,不否认程序的编写是有错误的,特别是在数据长度的处理上。在应用中应该注意。

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
STM32是一款非常流行的嵌入式微控制器系列,它具有强大的性能和丰富的外设资源。在学习STM32时,掌握如何进行Flash是非常重要的。 Flash是一种非易失性存储器,可以用来存储程序代码和数据。在STM32中,Flash存储器通常用来存储应用程序代码。下面是一个简单的Flash程序的示例: 1.首先,我们需要包含适用于所使用的STM32型号的头文件。例如,对于STM32F4系列,我们需要包含"stm32f4xx.h"。 2.然后,我们需要定义一个指向Flash存储器的指针变量。例如,可以使用如下代码:`uint32_t* flash_address = (uint32_t*)0x08000000;`其中0x08000000是Flash存储器的起始地址。 3.要Flash存储器中的数据,我们可以通过以下代码实现:`data = *flash_address;`其中data是一个变量,用于存储取到的数据。 4.要入数据到Flash存储器中,我们可以通过以下代码实现:`*flash_address = data;`其中data是要入的数据。 需要注意的是,STM32的Flash存储器是有保护机制的,因此在入数据之前,我们需要禁用保护。可以使用以下代码禁用保护:`FLASH->KEYR = 0x45670123; FLASH->KEYR = 0xCDEF89AB;`然后才能进行数据入。 另外,为了确保数据的完整性,我们可以使用CRC校验来验证Flash存储器中的程序代码的正确性。可以使用库函数来计算校验和,然后将其与预期的校验和进行比较以进行验证。 综上所述,掌握STM32的Flash操作对于嵌入式系统的开发非常重要。上述示例代码可以帮助我们快速进行Flash操作,同时注意保护和数据校验可以提高数据的安全性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值