HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, Robot_Num_Flash_Add, Write_Flash_Data); HAL_FLASH_Lock();//锁住Flash 写完之后,接着就到读了,Flash写有次数限制,写的次数在1W次还是10W次(忘了)就不可写入了,而读是没有次数限制的,读多少次都可以,下面就把写入到Flash里的数据0x0001读出来 uint32_t ...
voidFLASH_W(uint32_t addr,uint16_t flash_read){//传入了需要写的flash地址,及写入的内容FLASH_EraseInitTypeDef My_Flash;//声明 FLASH_EraseInitTypeDef 结构体为 My_FlashHAL_FLASH_Unlock();//解锁FlashMy_Flash.TypeErase= FLASH_TYPEERASE_PAGES;//标明Flash执行页面只做擦除操作My_Flash.PageAddress =...
在写入或擦除之前调用 HAL_FLASH_Unlock()。在操作完成后调用 HAL_FLASH_Lock()。
if(HAL_Status != HAL_OK) printf("内部FlASH擦除失败!rn"); //step3 写入数据 HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,addr,Pdata); //step4 锁定FLASH HAL_FLASH_Lock(); } 写入数据前,需解锁并擦除,如上代码所示。 编写内部FLASH读函数FLASH_Inside_Rd() /** * @brief 读取内部FLASH数据 ...
HAL_FLASH_Program()函数对于不同芯片的HAL库,入参也不甚相同,有的芯片可以按1字节、2字节、4字节、8字节写入,比如STM32F407,有的芯片只能按8字节写入,比如STM32L4。同时,Flash写入时要注意字节对齐,比如现在要写一个双字节到Flash某一地址,那么该地址必须也是双字节的整数倍;如果要写一个4字节,那么同理,地址...
if(HAL_FLASHEx_Erase(&EraseInitStruct, &pageError) != HAL_OK) { HAL_FLASH_Lock(); //上锁 return 2; //擦除有错误,返回2 } //下面这些是清除标志位 __HAL_FLASH_DATA_CACHE_DISABLE(); __HAL_FLASH_INSTRUCTION_CACHE_DISABLE();
1,程序通过串口写入及读写数据,通过printf打印输出。注:这里不讲解printf 的设置 2,写入数据代码: HAL_StatusTypeDef flash_write(uint32_t address, uint64_t data) { uint32_t PageError=0; FLASH_EraseInitTypeDef FlashEraseInit;//擦除结构体
STM32实现内部Flash的读写(HAL库版) Flash 中⽂名字叫闪存,是⼀种长寿命的⾮易失性(断电数据不丢失)的存储器。可以对称为块的存储器单元块进⾏擦写和再编程,在进⾏写⼊操作之前必须先执⾏擦除。⼀个Nand Flash由多个块(Block)组成,每个块⾥⾯⼜包含很多页(page)。每个页对应⼀个...
1、正常写入,整bank擦除,能够成功写入flash 2、写入后卡死,擦除几个page,无法写入,并且程序卡死 以下为卡死的代码: /* Unlock the Flash to enable the flash control register access ***/ HAL_FLASH_Unlock(); /* Erase the user Flash area (area defined by FLASH_USER_START_ADDR and FLASH_USER_...
HAL_FLASH_Unlock();__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);flash_count=0;while(flash_count...