1、Flash的使用之前必须对Flash进行擦除,不能直接写入进行覆盖。其原因是Flash的工作原理存储二进制的0和1,且只能实现从1到0的变化。这就意味着但Flash中已经烧入由0和1组成的文件后,无法直接再次烧入其他二进制文件。必须使用特定的函数将Flash中已存在的0和1全部转换成1,这个就是Flash的擦除。在将Flashj擦除后,Flash中全部显示为1,这是用户即可重新进行新文件的写入。
2、STM32对Flash的读写功能实现步骤(为以下流程图)
3、使用函数的简单说明。
(1)HAL_FLASH_Unlock();
功能是解锁STM32的Flash区,这是擦除与写入的第一步。
(2)定义擦除结构体
typedef struct
{
uint32_t TypeErase;
//TypeErase:
//主要对应Falsh擦除的两种方式即扇擦除FLASH_TYPEERASE_SECTORS和块擦除
//FLASH_TYPEERASE_MASSERASE
uint32_t Banks;
//当选择使用块擦除时,想要擦除的块区域
uint32_t Sector;
//当选择使用扇擦除时,想要擦除的扇区域
uint32_t NbSectors; 、
//当选择使用扇擦除时,想要擦除的扇数量
uint32_t VoltageRange;
//擦除时的电压范围,与擦除的速度有关
} FLASH_EraseInitTypeDef;
(3)HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *SectorError)
擦除函数,对FLASH的指定内容进行擦除。第一个参数为前面定义的结构体,第二参数为0,具体为啥我也理解不太清除,功能是防止出错
(4)HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr, WriteFlashData);
功能为对flash进行写入,第一个参数为写入值得大小,第二个参数为写入值的FLASH地址,第三个参数为写入的值的内容
(5)HAL_FLASH_Lock();
锁住FLASH,防止写入与擦除
4、具体核心代码如下
对STM32F407VET6的最后一个扇区进行读写功能的实现,并通过串口打印出来。
5、实验结果
实验成功
6、小结
本文对stm32F407vet6进行了简单的Flash配置与学习,后续可对Flash进一步的深入学习。在结构体那块,stm32f10系列不太一样,后续开发的时候需要注意!
标签:Flash,HAL,入门,STM32F407VET6,FLASH,写入,擦除,uint32 From: https://blog.csdn.net/qq_58159043/article/details/140093236