1. 说明
本文使用的芯片型号为:STM32F105RBT6,FLASH大小128KB, 如果使用STM32F105RCT6,则FLASH为256KB,增加一个128KB的FLASH页。
2. FLASH地址判断
第0页起始地址 0x08000000 //16K
第1页起始地址 0x08004000 //16K
第2页起始地址 0x08008000 //16K
第3页起始地址 0x0800C000 //16K
第4页起始地址 0x08010000 //16K
第4页最终地址 0x0801FFFF // 64K
共计128KB。
/*以下为单页写入,注意不要产出页范围*/
uint32_t FLASH_WAITETIME = 1000; //FLASH写入超时时间
void STMFLASH_Write_Halfword(uint32_t WriteAddr, uint8_t *pBuffer) //写入1个字节
{
//定义各种变量
FLASH_EraseInitTypeDef FlashEraseInit; //擦除结构体
HAL_StatusTypeDef FlashStatus=HAL_OK; //状态指示
uint32_t SectorError=0;
//解锁FLASH
HAL_FLASH_Unlock();
//判断地址合法
if(WriteAddr<0X1FFF0000)
{
//初始化擦除变量
FlashEraseInit.TypeErase= FLASH_TYPEERASE_PAGES; //擦除类型 按页擦除
FlashEraseInit.Banks = FLASH_BANK_1; //批量擦除
FlashEraseInit.NbPages=1; //要擦除的页面数量
Fla