vasily777 (20.08.2017 07:31 - 07:34, просмотров: 2761) 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В