 vasily777 (20.08.2017 07:31 - 07:34, просмотров: 2951) MBedder
 vasily777 (20.08.2017 07:31 - 07:34, просмотров: 2951) MBedder
STM8L051 ADC ( 1 канал PB1) + DMA, не получается запустить. Или может кто рабочим поделится? uint16_t result;   
uint16_t recv_array[32];
GPIO_Init(GPIOB, GPIO_Pin_1, GPIO_Mode_In_FL_No_IT);//ain17
RI->ASCR1=RI_ASCR1_AS5;
RI->IOSR3=RI_IOSR2_CH5E;  
// Adjust system clock prescaler
  CLK->CKDIVR = 0; // no system clock prescaler (16 MHz)
  
  // Configure DMA
  CLK->PCKENR2 |= CLK_PCKENR2_DMA1; //Тактирование
  
  DMA1_Channel0->CPARH = (ADC1_BASE+4)>>8; //Адрес регистра АЦП (старший байт)
  DMA1_Channel0->CPARL = (uint8_t)(ADC1_BASE+4); //Младший
  DMA1_Channel0->CM0ARH = (uint8_t)((uint16_t)(recv_array)>>8); //Адрес буфера
  DMA1_Channel0->CM0ARL = (uint8_t)(recv_array);  
  DMA1_Channel0->CNBTR = sizeof(recv_array)/2;//-1; //Размер буфера (in WORDS)
  
  DMA1_Channel0->CSPR = DMA_CSPR_16BM | DMA_CSPR_PL;  //Режим работы с 16и битными числами. | HighPriority
  DMA1_Channel0->CCR = DMA_CCR_CE | DMA_CCR_TCIE | DMA_CCR_IDM | DMA_CCR_ARM; //Включаем канал и разрешаем прерывание | increment | AutoReload
  
  SYSCFG->RMPCR1 = 0x0C; 
  
  DMA1->GCSR |= DMA_GCSR_GE; //Включаем DMA  
  
  // Coinfigure ADC
  
  
  CLK->PCKENR2 |= CLK_PCKENR2_ADC1; //Тактирование
  ADC1->CR1 |= ADC_CR1_ADON | ADC_CR1_CONT;//  | ADC_CR1_OVERIE;//| ADC_CR1_EOCIE; //Пинаем АЦП, чтобы он проснулся + Continious
  ADC1->CR2 |= ADC_CR2_PRESC | (uint8_t)0x07; // 02; // low speed | 16 cycles per samle period
  ADC1->CR3 |= (uint8_t)0x07<<5; // 16 cycles per samle period
  
  
  ADC1->TRIGR[0] = 0x00;
  ADC1->TRIGR[2] = 0x02;
  ADC1->TRIGR[3] = 0x00;
  ADC1->SQR[0] = 0x00;
  ADC1->SQR[1] = 0x00;
  ADC1->SQR[2] = 0x02; //Measure ext channel 17
  ADC1->SQR[3] |= 0x00;
  
  // Enable interrupts
  asm("RIM");
  ADC1->CR1 |= ADC_CR1_START; //Поехали!   // Adjust system clock prescaler
  После запуска значения в буфере 4092-4095. Хотя на ноге PB1 0,2-0,8В. Питание 3,3В