Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: magnetron - 14 Kasım 2023, 22:33:39

Başlık: STM32F4 Backup RAM kullanımı
Gönderen: magnetron - 14 Kasım 2023, 22:33:39
merhaba forum,

STM32F4 işlemcide enerji gittiğinde dataları Backup RAM de saklamak istiyorum
ama yeniden açıldığında saçma değerler geliyor - pil takılı

nasıl yapıcam , teşekkür

void EXTI16init(void) {

  EXTI_ClearITPendingBit(EXTI_Line16);
  EXTI_InitStructure.EXTI_Line = EXTI_Line16;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
}
  NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  /* Configure the PVD Level to 2.9V */
          EXTI16init();
          PWR_PVDLevelConfig(PWR_PVDLevel_7);
    /* Enable the PVD Output */
          PWR_PVDCmd(ENABLE);

  /* Enable PWR clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
  /* Enable BKPRAM Clock */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_BKPSRAM, ENABLE);
  /* Enable the Backup SRAM low power Regulator to retain it's content in VBAT mode */
  PWR_BackupRegulatorCmd(ENABLE);
  /* Allow access to BKP Domain */
  PWR_BackupAccessCmd(ENABLE);

void PVD_IRQHandler(void)
{
    __disable_irq();

  save_retentive();
    /* Clear the Key Button EXTI line pending bit */
    EXTI_ClearITPendingBit(EXTI_Line16);
    EXTI_ClearFlag(EXTI_Line16);
    while (1){Delay(100);IWDG_ReloadCounter();
  }
}

void read_retentive(void){
uint8_t i;uint16_t *RAMptr=&RAM[DATAWORDS+100*2];

  for (i = 0; i < 100; i += 1)
  {
  *RAMptr= *(__IO uint16_t *) (BKPSRAM_BASE + i*2);
  RAMptr++;
  }
}
void save_retentive(void){
uint8_t i;uint16_t *RAMptr=&RAM[DATAWORDS+100*2];

  for (i = 0; i < 100; i += 1)
  {
   *(__IO uint16_t *) (BKPSRAM_BASE + i*2)=*RAMptr;
   RAMptr++;
  }
}
Başlık: Ynt: STM32F4 Backup RAM kullanımı
Gönderen: Mucit23 - 15 Kasım 2023, 10:50:52
STM32F4 Serisinde BKP Registerlerine erişmek için ilk önce BKPSRAM ve PWR donanımlarının Clock'unu açmak gerekiyor.
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_BKPSRAM, ENABLE);

Daha sonra BKP Registerlerine erişimi aktif etmelisin

PWR_BackupAccessCmd(ENABLE);
Daha Sonra RTC_WriteBackupRegister ve RTC_ReadBackupRegister fonksiyonları ile yazma ve okuma yapabilirsin


Başlık: Ynt: STM32F4 Backup RAM kullanımı
Gönderen: magnetron - 15 Kasım 2023, 14:02:26
hocam merhaba,

sizin dediklerinizi yapmıştım clokları açtım pil de takılı

RTC_WriteBackupRegister ve RTC_ReadBackupRegister ise
bunlar Backup Data Registerlere yazmak okumak için anladığım kadarıyla

datasheette belirtilen 4 KB Backup SRAM
ben buraya yazmak okumak istiyorum
bunu yapmak için açmak gereken bir kilit falan var mı

teşekkür
Başlık: Ynt: STM32F4 Backup RAM kullanımı
Gönderen: Mucit23 - 16 Kasım 2023, 10:39:45
Bildiğim kadarıyla 4KB SRAM sadece bazı modellerde sunuluyor. STM32F427 ve STM32F437 Serisinde var. Bunlara erişmek için ekstra bir takım ayarlar yapmanız gerekiyor anladığım kadarıyla.

Aşağıdaki yazıyı okumanızı tavsiye ederim.

STM32F407 serisi için standart olarak 20 Adet BKP Registeri var. Bahsettiğim fonksiyonlarla bu registerlara yazma okuma yapabiliyorsunuz. Fakat 4KB opsiyonel SRAM farklı bir adreste yer alıyor. Buraya Reference Manual Sayfa 115'de Backup SRAM'e nasıl erişileceği anlatılmış.

(https://i.hizliresim.com/r9drjq3.png)

Başlık: Ynt: STM32F4 Backup RAM kullanımı
Gönderen: magnetron - 16 Kasım 2023, 11:45:05
teşekkür ederim @Mucit23 hocam