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

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

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

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

STM32Cube学习笔记-内部FLASH读写操作_第1张图片

   可以操作的扇区为块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的打开和上锁函数。

STM32Cube学习笔记-内部FLASH读写操作_第2张图片

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

STM32Cube学习笔记-内部FLASH读写操作_第3张图片

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

STM32Cube学习笔记-内部FLASH读写操作_第4张图片

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

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

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

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

要写的数据是

STM32Cube学习笔记-内部FLASH读写操作_第5张图片

STM32Cube学习笔记-内部FLASH读写操作_第6张图片

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

STM32Cube学习笔记-内部FLASH读写操作_第7张图片

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

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

 

你可能感兴趣的:(STM32Cube学习,stm32)