STM32F407 SPI DMA kullanımı hakkında

Başlatan burak54, 07 Ocak 2016, 00:08:14

burak54

Merhaba arkadaşlar,
STM32F407 ile SPI i DMA yardımı ile kullanmak istiyorum ancak çalıştıramadım. Nasıl bir yol izlemeliyim ? Teşekkürler. İyi Çalışmalar.

burak54

void SPI_DMA_CONFIG(void)
{
	DMA_InitTypeDef DMA_InitSPI;
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE); 
  
	//TX
	DMA_InitSPI.DMA_Channel = DMA_Channel_3;
	DMA_InitSPI.DMA_PeripheralBaseAddr =(uint32_t) & (SPI1->DR) ;
	DMA_InitSPI.DMA_Memory0BaseAddr =(uint32_t) & (SPI_Out);
	DMA_InitSPI.DMA_DIR =DMA_DIR_MemoryToPeripheral ;
	DMA_InitSPI.DMA_BufferSize = 2;
	DMA_InitSPI.DMA_PeripheralInc =DMA_PeripheralInc_Disable;
	DMA_InitSPI.DMA_MemoryInc =DMA_MemoryInc_Enable ;
	DMA_InitSPI.DMA_PeripheralDataSize =DMA_PeripheralDataSize_Byte ;
	DMA_InitSPI.DMA_MemoryDataSize =DMA_MemoryDataSize_Byte ;
	DMA_InitSPI.DMA_Mode =DMA_Mode_Normal;
	DMA_InitSPI.DMA_Priority =DMA_Priority_Medium ;
	DMA_InitSPI.DMA_FIFOMode =DMA_FIFOMode_Disable ;
	DMA_InitSPI.DMA_FIFOThreshold =DMA_FIFOThreshold_1QuarterFull ;
	DMA_InitSPI.DMA_MemoryBurst =DMA_MemoryBurst_Single ;
	DMA_InitSPI.DMA_PeripheralBurst =DMA_PeripheralBurst_Single ;
	DMA_Init(DMA2_Stream3, &DMA_InitSPI);
	NVIC_EnableIRQ(DMA2_Stream3_IRQn);
	DMA_ITConfig(DMA2_Stream3, DMA_IT_TC,ENABLE);
	
	//RX
	DMA_InitSPI.DMA_Channel = DMA_Channel_3;
	DMA_InitSPI.DMA_PeripheralBaseAddr =(uint32_t) & (SPI1->DR) ;
	DMA_InitSPI.DMA_Memory0BaseAddr =(uint32_t) & (SPI_In);
	DMA_InitSPI.DMA_DIR =DMA_DIR_PeripheralToMemory ;
	DMA_InitSPI.DMA_BufferSize = 2;
	DMA_InitSPI.DMA_PeripheralInc =DMA_PeripheralInc_Disable;
	DMA_InitSPI.DMA_MemoryInc =DMA_MemoryInc_Enable ;
	DMA_InitSPI.DMA_PeripheralDataSize =DMA_PeripheralDataSize_Byte ;
	DMA_InitSPI.DMA_MemoryDataSize =DMA_MemoryDataSize_Byte ;
        DMA_InitSPI.DMA_Mode =DMA_Mode_Normal;
	DMA_InitSPI.DMA_Priority =DMA_Priority_Medium ;
	DMA_InitSPI.DMA_FIFOMode =DMA_FIFOMode_Disable ;
	DMA_InitSPI.DMA_FIFOThreshold =DMA_FIFOThreshold_1QuarterFull ;
	DMA_InitSPI.DMA_MemoryBurst =DMA_MemoryBurst_Single ;
	DMA_InitSPI.DMA_PeripheralBurst =DMA_PeripheralBurst_Single ;
	DMA_Init(DMA2_Stream0, &DMA_InitSPI);
	NVIC_EnableIRQ(DMA2_Stream0_IRQn);
	DMA_ITConfig(DMA2_Stream0, DMA_IT_TC,ENABLE);
}

Böyle birşeyler yaptım ama eksik var sanırım.

Klein

SPI donanımı şu an DMA olmadan çalışıyor mu?

burak54

Hayir, once onu tek basina mi calistirmam gerek ?

Klein

Eevt önce DMA olmadan çalıştırmalısın.

burak54

@Klein tamam once bir oyle deneyim calistirmayi. Denemeden ogrenilmiyor :) Tesekkur ederim.