Stm32 DMA_SxNDTR在启用流后将自身设置为最大值(65535)

Stm32 DMA_SxNDTR在启用流后将自身设置为最大值(65535),stm32,dma,usart,Stm32,Dma,Usart,我正在尝试使用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

我正在尝试使用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
这是错误的
DMA2_Stream2->CR |=1这是将DMA配置寄存器设置为外围流量控制而不是正常流量控制的症状

在正常流量控制中,DMA_SxNDTR设置要传输的数据块的数量,并在每次传输项目时递减。当DMA_SxNDTR达到0时,传输完成。 当使用外围流量控制时,外围设备通过其他方式向DMA控制器发送传输结束的信号。 来自STM32F767参考手册RM0410第8.2节,用于不同的MCU,但具有类似的外围硬件

–DMA流量控制器:要传输的数据项的数量是软件可编程的 从1到65535

–外围流量控制器:要传输的数据项数量未知 并由发送结束信号的源或目标外围设备控制 硬件传输

另请参见同一手册中的第8.3.16节流量控制器