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
读取。
第一个闪存扇区从0x08000000
开始。
counter2
、3
和4
通过OLED屏幕显示。
显示counter2
可以正常工作,并显示counter-1
的值,但只能工作一次。如果我再次写入闪存,似乎没有任何反应。
counter3
和counter4
根本不工作。
当我擦除了闪存但没有写入任何内容时,OLED上的输出为counter=0x00000008
:
counter2: 536873624
counter3: -652214262
counter4: 31006720
在编写和重置后:
counter2: 8
counter3: -654311424
counter4: 30998528
这里发生了什么?有人能告诉我为什么所有变量都改变了吗? 我需要配置链接器吗?