fsmc am stm32f4

OP #3266883
Lesenswert?
• ▲
▼
Guten Abend,

ich habe schon seit längerer Zeit ein Problem mit dem FSMC des 
STM32F4-Discovery Boards. Ich möchte ein Wiz830mj (Breakoutboard zu 
einem W5300 von Wiznet) über den FSMC zugreifen.

Hier schon mal mein Code so weit:
1
// GPIO Init-Structure
2
  GPIO_InitTypeDef gpioInitStruct;
3

4
  // Enable GPIO D and E clocks
5
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE, ENABLE);
6

7
  //Create GPIO D InitStructure for used pins
8
  gpioInitStruct.GPIO_Mode =    GPIO_Mode_AF;
9
  gpioInitStruct.GPIO_Speed =    GPIO_Speed_100MHz;
10
  gpioInitStruct.GPIO_OType =   GPIO_OType_PP;
11
  gpioInitStruct.GPIO_PuPd =    GPIO_PuPd_UP;
12
  gpioInitStruct.GPIO_Pin =    GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
13
  // Initialize Pins
14
  GPIO_Init(GPIOD, &gpioInitStruct);
15

16
  // Configure GPIO D pins as FSMC alternate functions
17
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC);
18
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC);
19
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC);
20
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC);
21
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC);
22
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC);
23
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC);
24
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC);
25
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_FSMC);
26
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_FSMC);
27
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_FSMC);
28
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC);
29
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC);
30

31

32
  // Create GPIO E InitStructure for used pins
33
  gpioInitStruct.GPIO_Pin =    GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
34
  // Initialize pins
35
  GPIO_Init(GPIOE, &gpioInitStruct);
36

37
  //Configure GPIO E pins as FSMC alternate function
38
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource3, GPIO_AF_FSMC);
39
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource4, GPIO_AF_FSMC);
40
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource5, GPIO_AF_FSMC);
41
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource6, GPIO_AF_FSMC);
42
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource7, GPIO_AF_FSMC);
43
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource8, GPIO_AF_FSMC);
44
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource9, GPIO_AF_FSMC);
45
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource10, GPIO_AF_FSMC);
46
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource11, GPIO_AF_FSMC);
47
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource12, GPIO_AF_FSMC);
48
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource13, GPIO_AF_FSMC);
49
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource14, GPIO_AF_FSMC);
50
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource15, GPIO_AF_FSMC);
51

52
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
53
  FSMC_NORSRAMTimingInitTypeDef FSMC_NORSRAMTimingInitStructureRead;
54
  FSMC_NORSRAMTimingInitTypeDef FSMC_NORSRAMTimingInitStructureWrite;
55

56
  // Enable FSMC Clock
57
  RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
58

59
  // Define Read timing parameters
60
  FSMC_NORSRAMTimingInitStructureRead.FSMC_AddressSetupTime = 0;
61
  FSMC_NORSRAMTimingInitStructureRead.FSMC_AddressHoldTime = 7;
62
  FSMC_NORSRAMTimingInitStructureRead.FSMC_DataSetupTime = 4;
63
  FSMC_NORSRAMTimingInitStructureRead.FSMC_BusTurnAroundDuration = 3;
64
  FSMC_NORSRAMTimingInitStructureRead.FSMC_CLKDivision = 2;
65
  FSMC_NORSRAMTimingInitStructureRead.FSMC_DataLatency = 1;
66
  FSMC_NORSRAMTimingInitStructureRead.FSMC_AccessMode = FSMC_AccessMode_A;
67

68
  // Define Write timing parameters
69
  FSMC_NORSRAMTimingInitStructureWrite.FSMC_AddressSetupTime = 0;
70
  FSMC_NORSRAMTimingInitStructureWrite.FSMC_AddressHoldTime = 6;
71
  FSMC_NORSRAMTimingInitStructureWrite.FSMC_DataSetupTime = 1;
72
  FSMC_NORSRAMTimingInitStructureWrite.FSMC_BusTurnAroundDuration = 3;
73
  FSMC_NORSRAMTimingInitStructureWrite.FSMC_CLKDivision = 2;
74
  FSMC_NORSRAMTimingInitStructureWrite.FSMC_DataLatency = 2;
75
  FSMC_NORSRAMTimingInitStructureWrite.FSMC_AccessMode = FSMC_AccessMode_A;
76

77
  // Define protocol type
78
  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
79
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
80
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
81
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
82
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
83
  FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
84
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_High; // Don't care
85
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
86
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; // Don't care
87
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
88
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
89
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable;
90
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
91
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &FSMC_NORSRAMTimingInitStructureRead;
92
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_NORSRAMTimingInitStructureWrite;
93

94
  // Initialize FSMC for read and write
95
  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
96

97
  // Enable FSMC
98
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);

so weit so gut... Figure 404 im ReferenceManual auf Seite 1320 verstehe 
ich so, dass der Speicherbereich für meinen W5300 jetzt bei 0x600000000 
anfangen müsste. Ist das so weit richtig?

Wenn ja, habe ich das Problem, dass ich auf diesen Speicherbereich auch 
im Debugger nicht zugreifen kann. Wenn ich im Memory-Window von Eclipse 
den Bereich auslesen will, bekomm ich nur die Fehlermeldung "Unable to 
load memory from the specified adress: 0x600000000".

Kann mir hier jemand auf die Sprünge helfen? Ist die Adresse falsch, auf 
die ich zugreifen will, oder stimmt etwas mit meiner FSMC-Konfiguration 
nicht?

Vielen Dank schonmal für die Hilfe im Voraus,
Bastian
Angehängte Dateien:

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.