STM32 内部FLASH读写操作

关于STM32内部FLASH读写操作

 

  1. 单片机程序flash对应的内部地址。 falsh内部128bytes为一页,32页一个扇区。为了不会破坏到程序一般我们把要存的数据放后面,或者放到最后一页,来读取保存。STM32程序起始地址一般为0x08000000。

 

2.读取数据

//faddr 要读取的地址

uint16_t STMFLASH_ReadHalfWord ( uint32_t faddr )

{

     return *(__IO uint16_t*)faddr;

}

 

uint16_t STMFLASH_Read (uint32_t  Addr )

{

     uint16_t Date = 0;

     Date = STMFLASH_ReadHalfWord(Addr);

     return Date;

}

 

 

 

 

3.写入数据

内部FALSH每次使用的时候都要解锁,使用完之后在上锁。

写入数据之前要擦除以前的数据,不然只会覆盖上一次数据会出现数据错误,上一次存数据为0x22,下次直接存储数据0x01,如果不擦除存成功后读出来就是0x21,所以要清除当前位置的数据。

 

typedef struct

{

      uint32_t TypeErase;     //以页为单位擦除

      uint32_t PageAddress;   //擦除的地址

      uint32_t NbPages;      //擦除页数

} FLASH_EraseInitTypeDef;

 

 

void STMFLASH_Write (  uint8_t  Buffer ,uint32_t  Addr)

{

    uint32_t SECTORError = 0;

    FLASH_EraseInitTypeDef EraseInitStruct;

 

    HAL_FLASH_Unlock();

    EraseInitStruct.TypeErase     = FLASH_TYPEERASE_PAGES;

    EraseInitStruct.PageAddress   = Addr;

    EraseInitStruct.NbPages       = 1;

    HAL_FLASHEx_Erase(&EraseInitStruct, &SECTORError);  //擦除函数,这里擦除一整页

                                                                                 SECTORError 擦除失败会返回失败地址

    HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,Addr,Buffer);  //写数据

                                                      //FLASH_TYPEPROGRAM_WORD  这里定义存储地址的方式  这里是32位的地址 地址为4的                                                        倍数不然会报错(地址方式为0x0800FF80 0x0800FF84 0x0800FF88)选用时根据自己情况                                                         选  择参数,有的是2的倍数

    HAL_FLASH_Lock();

}

你可能感兴趣的:(STM32HAL库学习)