Цитата(scifi @ May 26 2016, 20:20)

Финиш. Приплыли. Можете ножками попробовать, но если ручки не алё, то шансов крайне мало.
Да ручками то уже але, только не совсем получилось.
CODE
RCC->AHB2ENR |= 1<<13; //ADCEN - запуск тактирования АЦП стр 225;
RCC->CCIPR |= 3<<28; //System clock selected as ADCs clock стр 243 10000000
ADC1->CR = 0; //DEEPPWD = 0 - пробуждение АЦП 20000005
ADC1->CR = 1<<28; //ADVREGEN - включаем питание АЦП
for(i=0;i<190000;i++) {}; //Ждем T_ADCVREG_STUP
ADC1->CR |= 0x80000000; //ADCAL - запускаем калибровкупри ADEN = 0
while (ADC1->CR & 0x80000000){};//Ждем завершения калибровки
GPIOB->MODER |= (3<<(2*1))|(3<<(2*1));//Analog input mode стр 264
GPIOB->ASCR = 1<<1; //PB1 Connect analog switch to the ADC input стр 270 0
ADC1->CR |= 1| //Разрешить АЦП ADEN
0<<1| //Bit 1 ADDIS: ADC disable command
0<<2| //Bit 2 ADSTART: ADC start of regular conversion
0<<3| //Bit 3 JADSTART: ADC start of injected conversion
0<<4| //Bit 4 ADSTP: ADC stop of regular conversion command
0<<5| //Bit 5 JADSTP: ADC stop of injected conversion command
0<<28| //Bit 28 ADVREGEN: ADC voltage regulator enable
0<<29| //Bit 29 DEEPPWD: Deep-power-down enable
0<<30| //Bit 30 ADCALDIF: Differential mode for calibration
0<<31; //Bit 31 ADCAL: ADC calibration
ADC123_COMMON->CCR = //input ADC clock divided by 256 стр 534 ADC123_COMMON->CCR
0<<0| //Bits 4:0 DUAL[4:0]: Dual ADC mode selection
0<<8| //Bits 11:8 DELAY: Delay between 2 sampling phases
0<<13| //Bit 13 DMACFG: DMA configuration (for dual ADC mode)
0<<14| //Bits 15:14 MDMA[1:0]: Direct memory access mode for dual ADC mode
1<<16| //Bits 17:16 CKMODE[1:0]: ADC clock mode
11<<18| //Bits 21:18 PRESC[3:0]: ADC prescaler
1<<22| //Bit 22 VREFEN: V REFINT enable
0<<23| //Bit 23 CH17SEL: CH17 (Temperature) selection
0<<24; //Bit 24 CH18SEL: CH18 (V_BAT) selection
ADC1->SQR1 = 0| //Число каналов преобразования 1 стр 520 0
16<<6| //Номер канала в последовательности 1
16<<12| //Номер канала в последовательности 2
16<<18| //Номер канала в последовательности 3
16<<24; //Номер канала в последовательности 4
ADC1->IER = 1<<2; //Разрешить прерывание по окончанию EOCIE(2) стр 505
NVIC->ISER[0] |= 1<<18; //= 18, ADC12 global Interrupt
//ADC1->CFGR |= 1<<13; //CONT - постоянные преобразования стр 510
ADC1->CR |= 1<<2; //Начать преобразование ADSTART
Код
void ADC1_2_IRQHandler(void)
{
volatile unsigned int i;
//ADC1->ISR = 1<<2; //Сбросить бит прерывания
Dummy = ADC1->DR; //Хотя он сбрасывается и при чтении ADC3->DR
ADC1->CR |= 1<<2; //Начать преобразование ADSTART
//При CONT = 1 почему - то неозможно сбросить бит EOC. Код виснет в прерывании.
}
Хотел у Куба ума занять, а Куб не але... Ацп выдает, но какой - то бред от 80 до 2700 отсчетов.
Сообщение отредактировал IgorKossak - May 26 2016, 17:29
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!