STM32内部flash读写注意(HAL库)

关于STM32内部flash存储数据读写时遇到的坑

最近做的一个项目需要用到stm32的内部flash,本以为会比较顺利,但是也遇到了一些困难,其中像遇到的flash擦除的时候程序卡死又或者是读取flash内容的时候也卡住的情况。

flash擦除卡住

我使用的是一块比较便宜的芯片stm32f030f4p6,这块芯片有16kROM以及4KRAM。代码函数如下,其中FLASH_START_ADDR宏定义为第16K的起始地址也就是0x08003c00,这里我遇到的坑就是如果想对芯片最后1K的字节进行擦除操作就必须是这一扇区的起始地址。如果你擦除的地址改成0x08003c01。那么,恭喜你,程序会卡住了。。。

void EraseFlash()//OK
{
   
	HAL_FLASH_Unlock();
	FLASH_EraseInitTypeDef f;
	f.TypeErase = FLASH_TYPEERASE_PAGES;//页面擦除
	f.PageAddress = FLASH_START_ADDR;
	f.NbPages = 1;  //一页
	uint32_t PageError = 0;

你可能感兴趣的:(单片机,stm32,嵌入式硬件)