这段代码首先解锁Flash以允许编程,然后使用HAL_FLASH_Program函数将数据写入指定的地址,最后重新锁定Flash以防止意外写入。 通过STM32CubeMX或其他工具配置Flash存储器和相关引脚: 使用STM32CubeMX配置项目,选择适当的时钟配置和Flash设置。 确保相关的引脚配置正确,以便与外部设备(如调试器)通信。 编译并生成可
// 写入32位数据到指定地址 void FLASH_Write(uint32_t address, uint32_t data) { // 1.解锁FLASH FLASH_Unlock(); // 2.擦除页,以便写入 FLASH_Erase_Sector(FLASH_SECTOR_11, FLASH_VOLTAGE_RANGE_3); // 擦除目标页 // 3.写入数据 if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address, ...
HAL_FLASH_Unlock(); for (i = 0; i < size; i += 4, buf+=4, addr += 4) { memcpy(&write_data, buf, 4); //用以保证HAL_FLASH_Program的第三个参数是内存首地址对齐 HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr, write_data); read_data = *(uint32_t *)addr; /* You can ad...
7V to 3.6V], the operation will* be done by byte */if(HAL_FLASH_Program(FLASH_TYPEPROGRAM...
(flash_status == FLASH_COMPLETE); i++) { flash_status = FLASH_ProgramWord(address,buffdata[i]); address = address + 4; } //上锁 FLASH_Lock(); if(flash_status == FLASH_COMPLETE) { return TRUE; } return FALSE; } //从指定地址读取固定长度数据 void FlashRead(u32 readaddr,u32 * ...
HAL_FLASH_OB_Unlock();HAL_FLASHEx_OBProgram(&OBInit);HAL_FLASH_OB_Lock();HAL_FLASH_Lock();...
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, WriteAddr, pBuffer[i]);WriteAddr += 2; //地...
stm32f103ze是大容量的芯片,每个page2k字节,每次至少写2字节,即2*n字节数量,通常情况下,写入数据都是1->0,而不能0->1,因为这个是flash的特性决定的,如果是0->1的操作,那么必须要整个page擦除,这个和eeprom是不一样的, eeprom是可以按字节进行读写的,当然容量没有flash大,因此各有利弊。
HAL_FLASH_Program,该函数声明如下:HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint...
}//开始写数据uint32_t startAddressIndex = PAGE_START_ADDRESS + (1024*paramSizeKb);//startAddressIndex += 8,写入位置,每次+8是因为存储的类型是uint64_t,占用64bit,8字节for(inti =0; i < len;i ++ , startAddressIndex +=8) {//写入数据HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, startAddres...