STM32 F407VGT6 SPI DMA Master

OP #4765142
Lesenswert?
• ▲
▼
Hallo zusammen,

ich hab mir nach dem Beispiel SPI_DataExchangeDMA aus der StdPeriph Lib 
v1.7.1 einen SPI Master auf meinem F407 Discovery aufgebaut. Leider tut 
sich aber nichts. Ich hab den Code mittlerweile mehrmals durchsehen, 
aber ich find den Fehler nicht.

Was erwarte ich: Ich erwarte den String "SPI Master" zu empfangen. Als 
Empfänger verwende ich einen Logikanalyzer, welcher auf eine positive 
Flanke am Clock reagiert. Hier kommmt aber nichts an.

Vielen Dank für eure Hilfe.


Stephan

1
#define BUFFERSIZE_DMA_SPI 100
2

3
uint8_t aTxBuffer[BUFFERSIZE_DMA_SPI] = "SPI Master";
4
uint8_t aRxBuffer[BUFFERSIZE_DMA_SPI];
5

6

7
static void SPI_Config(void) {
8
  // SPI-Clock enable
9
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
10

11
  // Clock Enable der Pins
12
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
13

14
  /* Enable DMA clock */
15
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
16

17
  /* Connect SPI pins to AF5 */
18
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
19
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
20
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
21

22
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
23
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
24
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
25
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;          
26

27
  /* SPI SCK PB13, MISO PB14, MOSI PB15 pin configuration */
28
  GPIO_InitStructure.GPIO_Pin = GPIO_PinSource13 | GPIO_PinSource14 | GPIO_PinSource15;
29
  GPIO_Init(GPIOB, &GPIO_InitStructure);
30

31
  /* SPI configuration -------------------------------------------------------*/
32
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
33
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
34
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
35
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
36
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                  //kein enable NSS-Pin
37
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
38
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
39
  SPI_InitStructure.SPI_CRCPolynomial = 7;
40
  //SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
41

42
  /* DMA configuration -------------------------------------------------------*/
43

44
  /* Configure DMA Initialization Structure */
45
  DMA_InitStructure.DMA_BufferSize = BUFFERSIZE_DMA_SPI;
46
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
47
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
48
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
49
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
50
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
51
  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
52
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&(SPI2->DR));
53
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
54
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
55
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
56
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
57
  /* Configure TX DMA */
58
  DMA_InitStructure.DMA_Channel = DMA_Channel_0;
59
  DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
60
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t) aTxBuffer;
61
  DMA_Init(DMA1_Stream4, &DMA_InitStructure);
62
  /* Configure RX DMA */
63
  DMA_InitStructure.DMA_Channel = DMA_Channel_0;
64
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
65
  DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t) aRxBuffer;
66
  /* Initializes the DMA for communication */
67
  DMA_Init(DMA1_Stream3, &DMA_InitStructure);
68

69
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
70
  /* Initializes the SPI communication */
71
  SPI_Init(SPI2, &SPI_InitStructure);
72

73

74
  /* Enable DMA SPI TX Stream */
75
  DMA_Cmd(DMA1_Stream4, ENABLE);
76

77
  /* Enable DMA SPI RX Stream */
78
  DMA_Cmd(DMA1_Stream3, ENABLE);
79

80
  /* Enable SPI DMA TX Requests */
81
  SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, ENABLE);
82

83
  /* Enable SPI DMA RX Requests */
84
  SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Rx, ENABLE);
85

86
  /* Enable the SPI peripheral */
87
  SPI_Cmd(SPI2, ENABLE);
88

89
}

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.