写入FLASH */ Address = WRITE_START_ADDR; while((Address < WRITE_END_ADDR) && (FLASHStatus == FLASH_COMPLETE)) { FLASHStatus = FLASH_ProgramWord(Address, Data); Address = Address + 4; } /* 锁定FLASH */ FLASH_Lock(); } 二、FLASH 擦除(以及防止误擦除程序代码) 1、擦除函数 FLASH_S...
锁定函数:void FLASH_Lock(void);有解锁当然就有上锁,为了保护Flash,读写和擦除全部需要的Flash后需要上锁,只需要调用: FLASH_Lock(); 写操作函数:固件库提供了三个 FLASH 写函数: FLASH_StatusFLASH_ProgramWord(uint32_t Address,uint32_t Data);FLASH_StatusFLASH_ProgramHalfWord(uint32_t Address,uint16_...
HAL_FLASH_Unlock(); //step2 开始擦除addr对应页 HAL_Status = HAL_FLASHEx_Erase(&pEraseInit,&PageError);//擦除 if(HAL_Status != HAL_OK) printf("内部FlASH擦除失败!rn"); //step3 写入数据 HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,addr,Pdata); //step4 锁定FLASH HAL_FLASH_Lock(); }...
| FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);FLASH_ProgramWord(addr, data);FLASH_LockBank1();
/* 向内部FLASH写入数据 */ Address = WRITE_START_ADDR; while((Address < WRITE_END_ADDR) && (FLASHStatus == FLASH_COMPLETE)) { FLASHStatus = FLASH_ProgramWord(Address, Data); Address = Address + 4; } FLASH_Lock(); /* 检查写入的数据是否正确 */ ...
顾名思义分别为:FLASH_ProgramWord 为 32 位字写入函数,其他分别为 16 位半字写入和用户选择字节写入函数。这里需要说明,32 位字节写入实际上是写入的两次 16 位数据,写完第一次后地址+2,这与我们前面讲解的 STM32 闪存的编程每次必须写入 16 位并不矛盾。写入 8位实际也是占用的两个地址了,跟写入 16 位基...
FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data);//一次写一个字,对于32系统,一次写的是4个字节,uint32_t 变量大小,32bit FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data);//一次写一个半字,对于32系统,一次写的是2个字节,uint16_t 变量大小,16bit ...
顾名思义分别为:FLASH_ProgramWord 为 32 位字写入函数,其他分别为 16 位半字写入和用户选择字节写入函数。这里需要说明,32 位字节写入实际上是写入的两次 16 位数据,写完第一次后地址+2,这与我们前面讲解的 STM32 闪存的编程每次必须写入 16 位并不矛盾。写入 8位实际也是占用的两个地址了,跟写入 16 位基...
FLASHStatus= FLASH_ProgramWord(Address, buff[k]);//写入一个字(32位)的数据入指定地址Address = Address +4;//地址偏移4个字节} FLASH_Lock();//重新上锁,防止误写入}else{return0; }if(FLASHStatus ==FLASH_COMPLETE) {return1; }return0; ...
STM32F4Discovery开发帮使用的STM32F407VGT6芯片,内部FLASH有1M之多。平时写的代码,烧写完之后还有大量的剩余。有效利用这剩余的FLASH能存储不少数据。因此研究了一下STM32F4读写内部FLASH的一些操作。【STM32F4 ...