Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define BUFFERSIZE 64
- uint8_t RxBuffer[BUFFERSIZE] = { 0 };
- DMA_InitTypeDef DMA_InitStructure;
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
- DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&USART1->DR);
- DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)(RxBuffer);
- DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
- DMA_InitStructure.DMA_BufferSize = sizeof(RxBuffer) / sizeof(RxBuffer[0]);
- DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
- DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
- DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
- DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
- DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; // ring buffer
- DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
- DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
- // DMA1_Channel5 -> CD00171190.pdf page 282, table 78
- DMA_Init(DMA1_Channel5, &DMA_InitStructure);
- DMA_Cmd(DMA1_Channel5, ENABLE);
- USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);
- USART_Cmd(USART1, ENABLE);
- uint16_t posNow = 0, posFIFO = 0;
- // last write value position in buffer
- posNow = (sizeof(RxBuffer) / sizeof(RxBuffer[0])) - DMA_GetCurrDataCounter(DMA1_Channel5);
- // print buffer
- while (posFIFO != posNow) {
- char ch = RxBuffer[posFIFO++];
- print("%c",ch);
- // buffer end
- if (posFIFO == (sizeof(RxBuffer) / sizeof(RxBuffer[0]))) { posFIFO = 0; }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement