| FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);FLASH_ProgramWord(addr, data);FLASH_LockBank1();
④ 本例中是调用FLASH_ProgramWord函数向指定地址写入指定数据,并等待FLASH操作结束进入下一步,CKS32F4xx系列官方库提供FLASH_ProgramHalfWord、FLASH_ProgramByte函数,用户可根据需求选用; ⑤ 调用FLASH_DataCacheCmd开启数据缓存; ⑥ 调用FLASH_Lock 上锁。 代码如下: int main(void) { cks_flash_test(); while ...
Backup_Current_Program();} // 判断是否需要更新程序 if(Prog_Status_Flag.Update_Flag == 0x55){...
顾名思义分别为:FLASH_ProgramWord 为 32 位字写入函数,其他分别为 16 位半字写入和用户选择字节写入函数。这里需要说明,32 位字节写入实际上是写入的两次 16 位数据,写完第一次后地址+2,这与我们前面讲解的 STM32 闪存的编程每次必须写入 16 位并不矛盾。写入 8位实际也是占用的两个地址了,跟写入 16 位基...
#define fmc_word_program FLASH_ProgramWord #endif 测试函数: 多嘴一句,STM32给的擦除扇区接口的入口参数是扇区首地址,GD32给的接口是扇区编号,从软件使用的角度来看,GD32的更优。 static uint8_t fmc_test_flag = 0; static void fmc_test(void) ...
FLASH_StatusFLASH_ProgramWord(uint32_tAddress,uint32_tData);FLASH_StatusFLASH_ProgramHalfWord(uint32_tAddress,uint16_tData);FLASH_StatusFLASH_ProgramOptionByteData(uint32_tAddress,uint8_tData); 分别为按字(32bit)写入、按半字(16bit)写入、按字节(8bit)写入函数。32 位字节写入实际上是写入的两次...
//program word FMC->ADDR = addr; // set upaddr FMC->DATA =worddata; FMC->CMD = 0x02; //Triggerprogramming while ((FMC->CMD &0x100)!=0); if (*(uint32_t *)addr== worddata) return 0;else return 1;}data_uint_type* data_area_init(void)//返回一个指向数据单元的指针,空指针表...
顾名思义分别为:FLASH_ProgramWord 为 32 位字写入函数,其他分别为 16 位半字写入和用户选择字节写入函数。这里需要说明,32 位字节写入实际上是写入的两次 16 位数据,写完第一次后地址+2,这与我们前面讲解的 STM32 闪存的编程每次必须写入 16 位并不矛盾。写入 8位实际也是占用的两个地址了,跟写入 16 位基...
在这里就不一个一个的详细说了,我们说一下常用的就行1. 解锁void FLASH_Unlock(void);2. 上锁void FLASH_Lock(void);3. 页擦除FLASH_Status FLASH_ErasePage(uint32_t Page_Address);4. 半字写入FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data);上面这4个函数就是我们最常用的。
解除写保护voidFLASH_Lock(void);// 擦除指定页FLASH_StatusFLASH_ErasePage(uint32_tPage_Address);// 擦除全部FLASH_StatusFLASH_EraseAllPages(void);// 擦除选项字节FLASH_StatusFLASH_EraseOptionBytes(void);// 在指定地址写入字FLASH_StatusFLASH_ProgramWord(uint32_tAddress,uint32_tData);// 在指定...