ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
536431
ANV (04.08.2014 15:04 - 15:41, просмотров: 1597)
Глюк с АЦП или что я не так настроил? Плата дискавери value line настройка АЦП. Запуск битами JSWSTART и SWSTART в прерывании таймера. Каналы настроены регулярные всегда AN0 инжектированные - всегда AN5, так вот на последней физически 2В, а АЦП меряет то 0 то 5 или ещё какую фигню. -- написал вот так // CNT_CONVER ANx JSMP4 JSMP3 JSMP2 JSMP1 ADC1->JSQR = (0 << 20) | (5 << (5 * 3)) | (5 << (5 * 2)) | (5 << (5 * 1)) | (5 << (5 * 0)); И всё заработало. Не пойму почему так, ведь если количество преобразований инжектированных каналов ставим 1 то должен обрабатываться только один канал - первый. И вообще ничего не понял что это и почему это, но работает :) Позже проведу разбор полетов void AdcInit(void) { ... RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; GPIOA->CRL &= ~((0x0f << 0) | (0x0f << 20)); // an0 and an5 ADC1->CR1 = 0; ADC1->CR2 = 0; ADC1->SMPR2 |= ADC_SMPR2_SMP0_2 | ADC_SMPR2_SMP0_1| ADC_SMPR2_SMP0_0; ADC1->SMPR2 |= ADC_SMPR2_SMP5_2 | ADC_SMPR2_SMP5_1| ADC_SMPR2_SMP5_0; ADC1->SQR1 = 0; // one conversation on AN0 ADC1->SQR2 = 0; ADC1->SQR3 = 0; // AN0 is selected ADC1->JSQR = 0x0000005; // one conversation on AN5 ADC1->CR2 = ADC_CR2_EXTSEL // event select for regular group is soft start | ADC_CR2_JEXTSEL // event select for injected group is soft start | ADC_CR2_JEXTTRIG | ADC_CR2_EXTTRIG; ADC1->CR1 |= ADC_CR1_SCAN; //ADC1->CR1 |= ADC_CR1_JEOCIE; //ADC1->CR1 |= ADC_CR1_EOCIE; //NVIC_EnableIRQ(ADC1_IRQn); //NVIC_SetPriority(ADC1_IRQn, 4); ADC1->CR2 |= ADC_CR2_ADON; __NOP();__NOP();__NOP(); ADC1->CR2 |= ADC_CR2_CAL; while(ADC1->CR2 & ADC_CR2_CAL) continue; // TMR2 - sample generator TIM2->CR1 &= ~TIM_CR1_CEN; TIM2->CR1 = 0x05 << 4; RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; TIM2->SR = 0; TIM2->CNT = 0; TIM2->ARR = 375 - 1; // 8 kHz //TIM2->CCR2 = 200; // CC2 event TIM2->PSC = 0; //TIM2->CCMR2 = TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4M_1; TIM2->DIER |= TIM_DIER_UIE; TIM2->CR1 |= TIM_CR1_CEN; NVIC_EnableIRQ(TIM2_IRQn); NVIC_SetPriority(TIM2_IRQn, 4); }