Advertisement
teplofizik

stm32f051_adc_dma_example.c

May 19th, 2016
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.17 KB | None | 0 0
  1. #include "adc.h"
  2. #include "../drivers.h"
  3. #include <stm32f0xx.h>
  4.  
  5. static const TPin adcX = {PA, 1}; //
  6. static const TPin adcY = {PA, 4}; //
  7.  
  8. // ADC: Ch.1, Ch.4 [Remap SYSCFG_CFGR1]
  9.  
  10. // Массив для результатов измерений
  11. uint16_t ADCRes[2];
  12.  
  13. void adc_InitDMA(void)
  14. {
  15.     // Включим тактирование DMA
  16.     RCC->AHBENR |= RCC_AHBENR_DMAEN;
  17.    
  18.     DMA1_Channel1->CNDTR = 2;
  19.     DMA1_Channel1->CPAR = (uint32_t)&ADC1->DR;
  20.     DMA1_Channel1->CMAR = (uint32_t)&ADCRes[0];
  21.     DMA1_Channel1->CCR = DMA_CCR_MINC | DMA_CCR_CIRC | DMA_CCR_EN | DMA_CCR_MSIZE_0 | DMA_CCR_PSIZE_0;
  22.    
  23.     ADC1->CFGR1 |= ADC_CFGR1_DMAEN | ADC_CFGR1_DMACFG; // DMA en, circ
  24. }
  25.  
  26. // АЦП
  27. void adc_Init(void)
  28. {
  29.     RCC->APB2ENR |= RCC_APB2ENR_ADCEN;
  30.    
  31.     gp_Analog(&adcX);
  32.     gp_Analog(&adcY);
  33.    
  34.     ADC1->CR |= ADC_CR_ADEN;
  35.     ADC1->CFGR1 |= ADC_CFGR1_CONT;
  36.     ADC1->CHSELR = ADC_CHSELR_CHSEL1 | ADC_CHSELR_CHSEL4;
  37.     ADC1->CR |= ADC_CR_ADSTART;
  38.     ADC1->SMPR = (1 << (3 * 1)) | (1 << (3 * 4)); // 28 cycles ch1
  39.  
  40.     adc_InitDMA();
  41. }
  42.  
  43. int adc_GetX(void)
  44. {
  45.     return ADCRes[0];
  46. }
  47.  
  48. int adc_GetY(void)
  49. {
  50.     return ADCRes[1];
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement