Does the STM32G030F6P6 microcontroller have 32kb or 64kb?
-->According to the datasheet and reference manual, I learned that the microcontroller has 64KB of memory, and I tested it and was able to read/write on pages 29, 30, 31. But why does the website say it has 32KB?

#define FLASH_SAYFA_SAYISI 3
//#define FLASH_SAYFA_1 0x08006800
//#define FLASH_SAYFA 2 0x08007000
//#define FLASH_SAYFA_3 0x08007800
#define FLASH_SAYFA_1 0x0800E800 //29
#define FLASH_SAYFA_2 0x0800F000 //30
#define FLASH_SAYFA_3 0x0800F800 //31
void Flash_Kayit() {
SensorKalibre_t *pFlashData;
uint32_t yeni_sira = 0;
uint32_t sayfa_adresi = 0;
uint8_t sayfa_bul = 0;
uint32_t sayfa_adresleri[FLASH_SAYFA_SAYISI] = {
FLASH_SAYFA_1,
FLASH_SAYFA_2,
FLASH_SAYFA_3
};
for (int i = 0; i < FLASH_SAYFA_SAYISI; i++) {
uint32_t* sayfa_baslat = (uint32_t*)sayfa_adresleri[i];
if (sayfa_baslat[0] == 0xFFFFFFFF) {
sayfa_adresi = sayfa_adresleri[i];
sayfa_bul = 1;
break;
}
}
if (!sayfa_bul) {
uint32_t eski_sira = 0xFFFFFFFF;
for (int i = 0; i < FLASH_SAYFA_SAYISI; i++) {
pFlashData = (SensorKalibre_t*)sayfa_adresleri[i];
if (pFlashData->veri_kontrol == FLASH_VERI_KONTROL &&
pFlashData->BOS > pFlashData->DOLU + MIN_ARALIK) {
if (pFlashData->sira_numarasi < eski_sira) {
eski_sira = pFlashData->sira_numarasi;
sayfa_adresi = sayfa_adresleri[i];
sayfa_bul = 1;
}
}
}
if (!sayfa_bul) {
sayfa_adresi = FLASH_SAYFA_1;
}
}
yeni_sira = 0;
for (int i = 0; i < FLASH_SAYFA_SAYISI; i++) {
pFlashData = (SensorKalibre_t*)sayfa_adresleri[i];
if (pFlashData->veri_kontrol == FLASH_VERI_KONTROL &&
pFlashData->BOS > pFlashData->DOLU + MIN_ARALIK) {
if (pFlashData->sira_numarasi > yeni_sira) {
yeni_sira = pFlashData->sira_numarasi;
}
}
}
SensorKalibre_t kaydedilecekVeriler;
kaydedilecekVeriler.veri_kontrol = FLASH_VERI_KONTROL;
kaydedilecekVeriler.sira_numarasi = yeni_sira + 1;
kaydedilecekVeriler.DOLU = kalibrasyondegeri.DOLU;
kaydedilecekVeriler.BOS = kalibrasyondegeri.BOS;
kaydedilecekVeriler.PwmMaxLimit = kalibrasyondegeri.PwmMaxLimit;
kaydedilecekVeriler.bos_alan = 0;
uint32_t sayfa_hatasi = 0;
HAL_FLASH_Unlock();
__disable_irq();
FLASH_EraseInitTypeDef sayfayıSil;
sayfayıSil.TypeErase = FLASH_TYPEERASE_PAGES;
sayfayıSil.Page = (sayfa_adresi - FLASH_BASE) / FLASH_PAGE_SIZE;
sayfayıSil.NbPages = 1;
if (HAL_FLASHEx_Erase(&sayfayıSil, &sayfa_hatasi) != HAL_OK) {
__enable_irq();
HAL_FLASH_Lock();
errorBlinkCount = 10;
return;
}
uint64_t *pData = (uint64_t*)&kaydedilecekVeriler;
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, sayfa_adresi, *pData) != HAL_OK) {
__enable_irq();
HAL_FLASH_Lock();
errorBlinkCount = 10;
return;
}
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, sayfa_adresi + 8, *(pData + 1)) != HAL_OK) {
__enable_irq();
HAL_FLASH_Lock();
errorBlinkCount = 10;
return;
}
__enable_irq();
HAL_FLASH_Lock();
kalibrasyondegeri = kaydedilecekVeriler;
}
Edited to apply source code formatting - please see How to insert source code for future reference.

