I'm trying to use DMA with USART1 to receive data in stm32f205xx series. After initialization sequence I read NDTR register and it has value 4, exactly what I put there. But after stream enabled value of NDTR is 65535.
RCC->AHB1ENR |= RCC_AHB1ENR_DMA2EN;
DMA2_Stream2->CR &= ~DMA_SxCR_EN;
while(DMA2_Stream2->CR & DMA_SxCR_EN);
DMA2_Stream2->PAR = (uint32_t)&(USART1->DR);
DMA2_Stream2->M0AR = (uint32_t)&test_array[0];
DMA2_Stream2->NDTR = 4;
uint32_t temp = DMA2_Stream2->NDTR; // HERE 4
DMA2_Stream2->CR |= (4<<25); //ch4 for stream 2
DMA2_Stream2->CR |= (3<<16); //very high priority
DMA2_Stream2->CR |= (1<<10); //increment memory
DMA2_Stream2->CR |= (1<<5); //flow control
DMA2_Stream2->CR |= (1<<4); //transmit complete interrupt enable
DMA2_Stream2->CR |= (1<<2)|(1<<1); //all interrupts available
DMA2_Stream2->FCR |= (1<<7); //all interrupts available
NVIC_EnableIRQ(DMA2_Stream2_IRQn);
uart1_init();
DMA2_Stream2->CR |= DMA_SxCR_EN;
temp = DMA2_Stream2->NDTR; //HERE 65535
This was wrong DMA2_Stream2->CR |= (1<<5); //flow control read reference manual Flow Control