[STM32F4] DMA -> SPI1

OP #3461850
Lesenswert?

Hallo...

ich suche ein Codesnippet um mit dem STM32F407 per DMA nach SPI1 die 
Daten zusenden.

static uint_fast16_t x_buffer[20480];

ist der buffer der gesendet werden soll. Dieser soll immer dauerhaft 
gesendet werden.

SPI1 ist auf 16bit eingestellt.

Hoffe ihr könnt mir helfen.

Danke,
Markus
OP #3481614
Lesenswert?

Hallo,

ich habe jetzt mein DMA so konfiguriert:

1
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
2
DMA_InitTypeDef DMA_InitStructure;
3

4
DMA_DeInit(DMA2_Stream5);
5
while (DMA_GetCmdStatus(DMA2_Stream5) != DISABLE);
6
DMA_StructInit(&DMA_InitStructure);
7
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) & (SPI1->DR);
8
DMA_InitStructure.DMA_Channel = DMA_Channel_3;
9
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
10
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
11
DMA_InitStructure.DMA_PeripheralInc = 0;
12
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
13
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
14
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
15
DMA_InitStructure.DMA_Priority = DMA_Priority_Low;
16
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable;
17
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
18
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
19
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
20
DMA_InitStructure.DMA_Memory0BaseAddr =(uint32_t)&xbuffer;
21
DMA_InitStructure.DMA_BufferSize = 20480;
22

23
DMA_Init (DMA2_Stream5, &DMA_InitStructure);
24
SPI_I2S_DMACmd (SPI1, SPI_I2S_DMAReq_Tx, ENABLE);
25
DMA_Cmd(DMA2_Stream5, ENABLE); /// TX

nur komme ich jetzt nicht mehr weiter bei den Einstellungen Source & 
Dest Size.

Source:
uint16_t xbuffer[20480]

Dest:
darf aber nur uint8 sein.

Wie müssen die Einstellungen sein damit DMA das 16bit zu 2x8bit ausgibt?


Danke,
Markus

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren