| FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);FLASH_ProgramWord(addr, data);FLASH_LockBank1();
FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data);FLASH_Status FLASH_ProgramHalf...
(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 * ...
// 写入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, d...
{ FLASHStatus=FLASH_ProgramWord(Address,p_data[i++]); Address=Address+4; } //检验数据是否出错 Address = StartAddr; i=0; while((Address < EndAddr) && (MemoryProgramStatus != 0)) { if((*(vu32*) Address) != p_data[i++]) ...
以下是一个简单的例子,展示如何使用STM32的HAL库来写入Flash: c #include "stm32f1xx_hal.h" void Flash_Write(uint32_t Address, uint32_t Data) { if (HAL_FLASH_Unlock() != HAL_OK) { // 错误处理 Error_Handler(); } if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address, Data) != ...
FLASH_ProgramHalfWord(startAddress+dataIndex*2,writeData[dataIndex]); } FLASH_Lock();//上锁写保护 } 在擦除之前应该将页面上的数据读取出来与要写入的数据合并,待擦除后再写入,但这样数据量很大(大容量是2K一个扇区),所以考虑到是少量数据存储,所以每次都将全部数据同时写入,简化操作,也减少数据处理量。经...
__attribute__((used))NVM_DRIVER_SECTION FLASH_StatusFLASH_ProgramWord(uint32_tAddress,uint32_tData){ FLASH_Status status = FLASH_COMPLETE; __IOuint32_ttmp =0;FLASH_WaitForLastOperation(ProgramTimeout,&status);if(status == FLASH_COMPLETE) ...
FLASH_ProgramHalfWord(addr + i, data[i/2]); } FLASH_Lock(); } uint16_t ReadFlash(uint32_t addr) { return *(__IO uint16_t*)addr; } 4. 重要注意事项 中断安全:操作期间建议关闭全局中断 __disable_irq(); // Flash操作 __enable_irq(); ...
本次使用RT-Thread studio编写,使用为5.02完整版,目的是将内部flash进行分区,可以直接在内部flash存储数据。 一、功能配置 首先是打开设置里的FAL组件,因为我这里不需要外部内存,SFUD驱动就没打开: 然后是配置两个参数,一个在board.h里,定义BSP_USING_ON_CHIP_FLASH,一个是在stm32xxxx_hal_config.h里定义HAL_FLA...