Вот код:
Код: Выделить всё
void adc_init(void)
{
//PA1-канал ADC1
GPIOA->CFGLR &= ~( GPIO_CFGLR_CNF1 | GPIO_CFGLR_MODE1);
//ADC Init
RCC->APB2PCENR |= RCC_APB2Periph_ADC1;
ADC1->CTLR2 |= ADC_ADON; //enable ADC
delay_ms(100);
ADC1->CTLR2 |= ADC_RSTCAL;
while(ADC1->CTLR2 & ADC_RSTCAL);
ADC1->CTLR2 |= ADC_CAL;
while(ADC1->CTLR2 & ADC_CAL);
ADC1->CTLR1 = 0;
ADC1->CTLR2 |= ADC_ADON;
ADC1->SAMPTR2 &= ~ADC_SMP1;
ADC1->SAMPTR2 |= ADC_SMP1_0 | ADC_SMP1_2;
//ADC1->RSQR1 = 0;
//ADC1->RSQR2 = 0;
ADC1->RSQR3 &= ~ADC_SQ1;
ADC1->CTLR2 &= ~ADC_ALIGN;
ADC1->CTLR1 &= ~ADC_SCAN;
ADC1->CTLR2 &= ~ADC_CONT;
}
Код: Выделить всё
uint16_t adc_read_single(void)
{
ADC1->CTLR2 |= ADC_SWSTART;
while(!(ADC1->STATR & ADC_EOC));
ADC1->STATR &= ~ADC_EOC;
return ADC1->RDATAR;
}