Guten Morgen, für eine spzeielle Anwendung wird für die UART ein DMA für den Empfang von Daten benötigt. Das Empfangen von Daten funktioniert auch nur wenn zum zweitenmal ein Datenpacket von 256 Bytes gesendet wird, dann stimmen die ankommenden Daten mit den gesendeten Daten von der Reihenfolge nicht. Das erste WORD wird dann vom letzten WORD des vorangegangen Packets befüllt. Was müsste ich tun, damit dieses Verhalten nicht mehr erscheint?
1 | /* DMA RX */ |
2 | DMA_DeInit(DMA1_Stream5); |
3 | DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&USART2->DR; |
4 | DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; |
5 | DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; |
6 | DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; |
7 | DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; |
8 | DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; |
9 | DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; |
10 | DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; |
11 | DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; |
12 | DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; |
13 | DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; |
14 | DMA_InitStructure.DMA_Channel = DMA_Channel_4; |
15 | DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; |
16 | DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)pUSART2->UsartRxDmaBuffer; |
17 | DMA_InitStructure.DMA_BufferSize = 256; |
18 | DMA_Init(DMA1_Stream5, &DMA_InitStructure); |