STM32 HAL库的基本flash操作

【STM32 HAL库的基本flash操作】文章部分内容来源网络,有问题请留言,谢谢。
读操作 读flash,直接用指针操作即可,但注意这里stm32是32位系统,所以读一次是半个字,也就是2个字节,写也是一样的;

uint16_t FLASH_ReadHalfWord(uint32_t faddr) { return *(__IO uint16_t*)faddr; } //从指定地址开始读出指定长度的数据 //ReadAddr:起始地址 //pBuffer:数据指针 //NumToWrite:半字(16位)数 void Flash_ReadData(uint32_t ReadAddr,uint16_t *pBuffer,uint16_t NumToRead) { uint16_t i; for(i=0; i

写操作 直接上代码,跟读一样,长度如果是字节数,一定要除以2;
void Flash_WriteData(uint32_t addr,uint16_t *data,uint16_t Size) { //1、解锁FLASH HAL_FLASH_Unlock(); //2、擦除FLASH //初始化FLASH_EraseInitTypeDef FLASH_EraseInitTypeDef f; f.TypeErase = FLASH_TYPEERASE_PAGES; f.PageAddress = addr; f.NbPages = 1; //设置PageError uint32_t PageError = 0; //调用擦除函数 HAL_FLASHEx_Erase(&f, &PageError); //3、对FLASH烧写 uint16_t TempBuf = 0; for(uint16_t i = 0; i< Size ; i++) { TempBuf = *(data+i); HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD , addr + i * 2, TempBuf); }//4、锁住FLASH HAL_FLASH_Lock(); }

测试
//实际应用中我们一般会使用一个结构体来保存参数,注意,数据长度要为偶数,所以我加了个NC在最后面 typedef struct { uint8_t test1 uint8_t test2 uint16_t test3; uint8_t test4; uint8_t NC; }Tag_Para; Tag_Para para; #define PARA_ADDR 0x0800 0E00 void main() { //写flash Flash_WriteData(PARA_ADDR, (uint16_t *)¶, (sizeof(Tag_Para))/2); //读flash Flash_ReadData(PARA_ADDR, (uint16_t *)¶, (sizeof(Tag_Para))/2); }

    推荐阅读