HAL库实践记录之读写内部FLASH

需要掉电存储少量数据,存储到内部Flash是比较好的选择。

硬件STM32f030K6T6。

固件:HAL

对于内部分flash操作大同小异。

写数据基本流程为解锁-》写入-》上锁,库函数都有对应的函数。

关于写数据,HAL只提供了三种数据类型的写入,HALFWORD、WORD、DOUBLEWORD,分别对应16bit、32bit、64bit。

写数据函数为HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data);第一个形参就是数据类型的定义。查看函数定义发现,多字节数据都会被分解以HALFWORD形式进行写入,所以HAL库向flash写入数据的最小单位是HALFWORD。

最终对flash写操作的函数:

static void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data)
{
  /* Clean the error context */
  pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;
  
    /* Proceed to program the new data */
    SET_BIT(FLASH->CR, FLASH_CR_PG);

  /* Write data in the address */
  *(__IO uint16_t*)Address = Data;
}

 

3.5标准库读写flash

uint32_t address = 0x08003000;
uint32_t already_times = 0;

FLASH_Unlock();                                //解锁
already_times = *((__IO uint32_t*)address);    //读取
already_times++;
FLASH_ErasePage(address);                      //擦除

FLASH_ProgramWord(address, already_times);     //写入
FLASH_Lock();                                  //上锁 

 

你可能感兴趣的:(stm32-HAL库)