FLASH_BASE_ADDR; // 对应扇区的首地址 uint16_t dataIndex; if (startAddress < FLASH_BASE_ADDR || ((startAddress + countToWrite * 2) >= (FLASH_BASE_ADDR + SECTOR_SIZE * FLASH_SIZE))) { return; // 非法地址 } FLASH_Unlock(); // 解锁写保护 FLASH_ErasePage(sectorStartAddress); //...
WriteAddr:起始地址,pBuffer:数据指针,NumToWrite:半字(16位)数。 代码解读 voidSTMFLASH_Write_NoCheck(u32WriteAddr,u16*pBuffer,u16NumToWrite) { u16i; for(i=0;i<NumToWrite;i++) { FLASH_ProgramHalfWord(WriteAddr,pBuffer[i]); WriteAddr+=2;//地址增加2. } } 1. 2. 3. 4. 5. 6. ...
FLASH_Unlock(); /* 擦除所有选项字节的内容,操作之前先进行擦除 */ FLASH_EraseOptionBytes(); /* 对所有页解除,这一句不加,应该也可以解锁写保护,因为选项字节被擦除至全为1 */ FLASH_EnableWriteProtection(0x00000000); FLASH_DEBUG("配置完成,芯片将自动复位加载新配置,复位后芯片会解除写保护状态\r\n...
if (err_time >= 5) return WRITE_START_ADDR; /* 向内部 FLASH 写入数据 */ Address = WRITE_START_ADDR; while ((Remain_u32 > 0) && (FLASHStatus == FLASH_COMPLETE)) { FLASHStatus = FLASH_ProgramWord(Address, DataAddress[SizeOf_u32-Remain_u32]); Address = Address + 4; Remain_u32...
FLASh 必须是先擦后写 下面的函数是分析案例 void FLASH_WriteByte(u32 addr ,u16 flashdata1) { FLASH_Status FLASHstatus = FLASH_COMPLETE; FLASH_Unlock();//解锁FLASH编程擦除控制器 // FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);//清除标志位 ...
的地址My_Flash.NbPages=1;//说明要擦除的页数,此参数必须是Min_Data = 1和Max_Data =(最大页数-初始页的值)之间的值uint32_t PageError=0;//设置PageError,如果出现错误这个变量会被设置为出错的FLASH地址HAL_FLASHEx_Erase(&My_Flash, &PageError);//调用擦除函数擦除uint16_t Write_Flash_Data=my...
staticintFlashReadWriteTest(void) { uint32_tucStartAddr; /* 解锁 */ FLASH_Unlock(); /* 擦除操作 */ ucStartAddr = ADDR_FLASH_PAGE_255; if(FLASH_COMPLETE != FLASH_ErasePage(ucStartAddr)) { printf("Erase Error!\n"); returnTEST_ERROR; ...
FLash_Test(void){inti;//把8bit数据类型转换为64bit数据类型,后面写入函数操作的是64bit数据类型,WriteflashBuff_64//16个8bit数据,换算成2个64bitfor(i=0;i<8;i++)WriteflashBuff_64[0]|=(uint64_t)ReadyflashBuff[i]<<i*8;for(i=0;i<8;i++)WriteflashBuff_64[1]|=(uint64_t)Readyflash...
n);while(1)/* *函数:FlashReadWhteTest,内部Flash读写测试函数*参数:void*返回:TEST_ERROR:错误(擦除、写入错误)TEST_SUCCESS:成功TEST_FAILED:失败*说向:无*staticintFlashReadWriteTest(void)(uint32_tucStartAddr;/*解锁*/FLASH_Unlock();/*擦除操作*/ucStartAddr=ADDR_FLASH_PAGE_255;if(FLASH_...
1、向,首先根据写入地址、数据字节数,对数据分页,再调用页写入函数,写入flash。 2、数据分页函数代码: 2.1 函数参数: pbuff:写入flash的数据指针 addr:写入flash的地址 num:写入flash的数据字节数 2.2函数代码: void spi_flash_write(uint8_t* pbuff,uint32_t addr,uint16_t num) ...