DMA_SxNDTR устанавливает себя на максимальное значение (65535) после включения потока - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь использовать DMA с USART1 для получения данных в серии stm32f205xx.После последовательности инициализации я читаю регистр NDTR, и он имеет значение 4, именно то, что я туда положил.Но после включения потока значение NDTR составляет 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

1 Ответ

0 голосов
/ 10 октября 2018

Это было неправильно DMA2_Stream2-> CR | = (1 << 5);// поток управления читать справочное руководство Flow Control </p>

...