uint32_t PAGEError = 0;
FLASH_EraseInitTypeDef EraseInitStruct;
EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS ;
EraseInitStruct.Sector = FLASH_SECTOR_0;
EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);
HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError);
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, 0x08000000, counter)
HAL_FLASH_Lock();
counter2 = *(__IO uint32_t *)0x08000000;
counter3 = *(__IO uint32_t *)0x08000001;
counter4 = *(__IO uint32_t *)0x08000002;
sprintf(buf, "%d", counter2); //gets send to the OLED with I2C
sprintf(buf2, "%d", counter3);
sprintf(buf3, "%d", counter4);
我想写变量计数器到闪存,然后读取它作为counter2。 第一个闪存扇区从0x0800 0000开始。STM32F4核上的HAL驱动程序擦除/读/写闪存
计数器2,3和4通过OLED屏幕显示。 显示计数器2的作品并显示计数器1的值,但它只能使用一次。如果我再次写入闪存,似乎没有任何事情发生。
counter3和counter4根本不工作。
输出的OLED当计数器= 0x00000008后,我已经删除了闪光灯,但不写任何东西:
计数器2:536873624
计数器3:-652214262
counter4:31006720
和书面方式和ressetting后:
计数器2:8
计数器3:-654311424
counter4:30998528
这是怎么回事?有人能告诉我为什么所有可变的变化? 我必须配置链接器吗?
我知道HAL,因为它是我所看到的,但最可笑的图书馆之一,改变这种闪光位置不太聪明。 –