STM32 - Doku und Samples zur MPU?

Gast #2219807
Lesenswert?
• ▲
▼
Hallo zusammen,
In einem Anflug von Sicherheitsbewusstsein dachte ich mir, man könnte 
die MPU auch ohne OS ganz sinnvoll verwenden. Mein Ziel wäre es, 
zumindest mal das RAM gegen Codeausführung zu Sperren und im RAM einen 
am Ende des Stacks ein paar Byte gegen jedweden Zugriff zu sperren (zur 
Erkennung des Stack-Overflow)

ST schweigt sich zur MPU ziemlich aus (bzw vielleicht finde ich es ganz 
einfach nicht). Und die Doku bei ARM stiftet bei mir eher mehr 
Verwirrung und verwendet zudem noch Assembler für die Beispiele. 
Allerdings ist es das erste mal, dass ich überhaupt eine MPU in nem 
Controller zur Verfügung hab, insofern kann's auch an meinen mangelnden 
Vorkenntnissen liegen...

Gibts irgendwo einen einfachen Samplecode mit ein paar verständlichen 
Erleuterungen?

Schon mal Dank im voraus.
Hannes
Gast #2245522
Lesenswert?
• ▲
▼
Alle neueren STM32 haben eine MPU. Namentlich also F103F/G (XL Density), 
STM32L und STM32F2xx.

Mittlerweile hab ich auch rausgefunden, wie das Teil funktioniert. Falls 
es mal jemand braucht, hier mal as Schützen des RAM gegen Ausführung von 
Code (getestet auf F205E und F103F):

  // Disable MPU
  MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk;

  // Region #0: No code execution in SRAM:
  MPU->RNR  = 0;
  MPU->RBAR = SRAM_BASE;                       // startaddress of SRAM
  MPU->RASR =  (0x10UL << MPU_RASR_SIZE_Pos)   // region size: 128kb 
(b10000 = 0x10)
             | (0x03UL << MPU_RASR_AP_Pos)     // R/W access allowed
             | MPU_RASR_XN_Msk                 // set XN bit
             | MPU_RASR_ENA_Msk;               // enable region

  // Enable the memory fault exception
  SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;

  // Enable MPU
  MPU->CTRL |= MPU_CTRL_PRIVDEFENA_Msk | MPU_CTRL_ENABLE_Msk;
Gast #2245541
Lesenswert?
• ▲
▼
So sieht das dann in der dafür gedachten Code-Umgebung aus :-)
1
// Disable MPU
2
MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk;
3

4
// Region #0: No code execution in SRAM:
5
MPU->RNR  = 0;
6
MPU->RBAR = SRAM_BASE;                    // startaddress of SRAM
7
MPU->RASR =  (0x10UL << MPU_RASR_SIZE_Pos)// region size:128kb (b10000=0x10)
8
             | (0x03UL << MPU_RASR_AP_Pos)// R/W access allowed
9
             | MPU_RASR_XN_Msk            // set XN bit
10
             | MPU_RASR_ENA_Msk;          // enable region
11

12
// Enable the memory fault exception
13
SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
14

15
// Enable MPU
16
MPU->CTRL |= MPU_CTRL_PRIVDEFENA_Msk | MPU_CTRL_ENABLE_Msk;
#2245685
Lesenswert?
• ▲
▼
Hallo Hannes,
in welcher PDF von ST ist die Doku zu finden ?
Ich kenne bis jetzt nur die MMU vom ARM926EJS, die ich schon mehrfach 
für Betriebssysteme verwendet habe.
Und jetzt muss ich auf einem Cortex M3 etwas zaubern, na wenigstens MPU 
!!!
Bei ST ist es etwas schwieriger gleich an die PDF zu kommen.

Danke, Gruß Sascha


PS. an derapplikator, danke für die Info, zum GLÜCK muss ich mein Geld 
nicht mit Deutsch verdienen.
#2245696
Lesenswert?
• ▲
▼
Sascha P. schrieb:

> in welcher PDF von ST ist die Doku zu finden ?

Cortex M3 Programming Manual, PM0056. Ist nicht unter den References 
sondern folgerichtig unter "Programming Manuals" zu finden, wo man sonst 
nur die Flash Programmierung sucht.

Aber Achtung: In den meisten 101/102/103 Typen, denen unterhalb XL 
Density (Suffix-F/G), ist die MPU nicht enthalten.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.