58-Backup_RAM-Library (STM32F4)

Mit dieser Library kann das interne 4k Byte große Backup-RAM vom STM32F4 benutzt werden um Daten auch bei ausgeschalteter CPU zu speichern.

Dazu muss am Pin 6 der CPU (VBAT) eine externe Batterie angeschlossen werden.
Vorsicht !! Beim Discovery-Modul ist Pin6 über einen 0 Ohm Widerstand (R26) mit VDD verbunden. Dieser R26 muss dann ausgelötet werden, sonnst versorgt die Batterie das ganze Board.

Ich habe “read” und “write” auf 16bit Datenwerte ausgelegt so das in der Summe 2048 Werte im RAM abgelegt werden können (Adr 0×0000 bis 0x07FF)

Benutzte Pins :

1
VBAT (Pin 6 der CPU) muss an eine externe Batterie

Voraussetzungen :

1
2
Benutzte Module der CooCox-IDE : RCC, PWR
Benutzte Librarys : keine

Funktionen :

1
2
3
ErrorStatus UB_BKP_RAM_Init(void);                    // zum init vom RAM (und Test ob ok)
void UB_BKP_RAM_Write(uint16_t adr, uint16_t wert);   // zum schreiben eines 16bit Wertes in das RAM
uint16_t UB_BKP_RAM_Read(uint16_t adr);               // zum lesen eines 16bit Wertes aus dem RAM

Beispiel :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//--------------------------------------------------------------
// File     : main.c
// Datum    : 06.09.2013
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.4
// GCC      : 4.7 2012q4
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der Backup-RAM-Lib
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------
 
#include "main.h"
#include "stm32_ub_led.h"
#include "stm32_ub_bkp_ram.h"
 
int main(void)
{
  ErrorStatus check;
  uint16_t ram_wert;
 
  SystemInit(); // Quarz Einstellungen aktivieren
 
  // init der LEDs
  UB_Led_Init();
 
  // init vom Backup-RAM
  check=UB_BKP_RAM_Init();
  if(check==SUCCESS) {
    // grüne LED einschalten
    UB_Led_On(LED_GREEN);
 
    // RAM Adresse 0x00 auslesen
    ram_wert=UB_BKP_RAM_Read(0x00);
    // test ob Inhalt stimmt
    if(ram_wert==0x3AC4) {
      // Inhalt ist richtig
      UB_Led_On(LED_BLUE);
    }
    else {
      // wenn Inhalt nicht stimmt
      UB_Led_On(LED_ORANGE);
      // Adresse 0x00 mit Wert 0x3AC4 beschreiben
      UB_BKP_RAM_Write(0x00,0x3AC4);
    }
  }
  else {
    // Fehler
    UB_Led_On(LED_RED);
  }
 
  while(1)
  {
 
  }
}

Hier die Library zum Download :

ub_stm32f4_bkp_ram_v100

Hier der komplette CooCox-Projektordner zum Download :

Demo_58_BKP_RAM


Eine Antwort auf 58-Backup_RAM-Library (STM32F4)

  1. Christian Julius sagt:

    Geht einfacher und komfortabler:

    Linker script:

    MEMORY
    {
    ROM (rx) : ORIGIN = 0×08000000, LENGTH = 1024K
    RAM (rwx) : ORIGIN = 0×20000000, LENGTH = 128K
    CCRAM (rwx) : ORIGIN = 0×10000000, LENGTH = 64K
    BKRAM (rw) : ORIGIN = 0×40024000, LENGTH = 4K
    }

    /* Backup RAM section */
    /* _sibkram = LOADADDR(.bkram); */
    .bkram :
    {
    . = ALIGN(4);
    *(.bkram)
    *(.bkram*)
    . = ALIGN(4);
    } >BKRAM

    und als Deklaration

    #define BKRAM __attribute__((section(“.bkram”)))

    int bkramvar BKRAM = 1235;


Wie hat Dir dieser Artikel gefallen?

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Noch keine Bewertungen)
Loading...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.