Advertisement
Guest User

Untitled

a guest
Feb 29th, 2016
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.47 KB | None | 0 0
  1. #define BUFFERSIZE 64
  2. uint8_t RxBuffer[BUFFERSIZE] = { 0 };
  3.  
  4. DMA_InitTypeDef  DMA_InitStructure;
  5.  
  6. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
  7. DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&USART1->DR);
  8. DMA_InitStructure.DMA_MemoryBaseAddr     = (uint32_t)(RxBuffer);
  9. DMA_InitStructure.DMA_DIR                = DMA_DIR_PeripheralSRC;
  10. DMA_InitStructure.DMA_BufferSize         = sizeof(RxBuffer) / sizeof(RxBuffer[0]);
  11. DMA_InitStructure.DMA_PeripheralInc      = DMA_PeripheralInc_Disable;
  12. DMA_InitStructure.DMA_MemoryInc          = DMA_MemoryInc_Enable;
  13. DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
  14. DMA_InitStructure.DMA_MemoryDataSize     = DMA_MemoryDataSize_Byte;
  15. DMA_InitStructure.DMA_Mode               = DMA_Mode_Circular;   // ring buffer
  16. DMA_InitStructure.DMA_Priority           = DMA_Priority_Medium;
  17. DMA_InitStructure.DMA_M2M                = DMA_M2M_Disable;
  18.  
  19. // DMA1_Channel5 -> CD00171190.pdf page 282, table 78
  20. DMA_Init(DMA1_Channel5, &DMA_InitStructure);
  21. DMA_Cmd(DMA1_Channel5, ENABLE);
  22.  
  23. USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);
  24. USART_Cmd(USART1, ENABLE);
  25.  
  26. uint16_t posNow = 0, posFIFO = 0;
  27.  
  28. // last write value position in buffer
  29. posNow = (sizeof(RxBuffer) / sizeof(RxBuffer[0])) - DMA_GetCurrDataCounter(DMA1_Channel5);
  30.  
  31. // print buffer
  32. while (posFIFO != posNow) {
  33.     char ch = RxBuffer[posFIFO++];
  34.     print("%c",ch);
  35.     // buffer end
  36.     if (posFIFO == (sizeof(RxBuffer) / sizeof(RxBuffer[0]))) { posFIFO = 0; }
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement