pokk 0 26 апреля, 2018 Опубликовано 26 апреля, 2018 · Жалоба Настроил ADC1, ADC2 в режиме Injected simultaneous mode, запускается по триггеру от таймера 4 1) Так вот в прерывании флаг JEOC от какого ADC проверять ? судя по даташиту они должны выставиться у обоих одновременно. 2) можно ли менять в процессе работы АЦП номера каналов в регисте JSQR ? (естественно после того как он завершит преобразование группы) (Каналов АЦП где-то 11, хочу настроить,4+4 инжекторных канала + переключать в прерывании от АЦП на другую группу 8ми каналов) //================================================================================ ================== /* * @Описание: Описание функции. * @Параметр: * @Возврат: Нету */ void Adc1_init(void){ //---------------------------------------------------------------------------------------------- RCC->APB2ENR |= RCC_APB2Periph_GPIOC; GPIO_INIT_PIN(GPIOC,10,GPIO_MODE_OUTPUT2_PUSH_PULL); GPIO_INIT_PIN(GPIOC,11,GPIO_MODE_OUTPUT2_PUSH_PULL); //---------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------- RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //ADC init //------------------------------------------------------------------------- RCC_ADCCLKConfig(RCC_PCLK2_Div4); //тактирование АЦП не больше 14Mhz 36/4=9Mhz //------------------------------------------------------------------------- RCC->APB2ENR |= RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB; GPIO_INIT_PIN(GPIOA,2,GPIO_MODE_INPUT_ANALOG); GPIO_INIT_PIN(GPIOA,1,GPIO_MODE_INPUT_ANALOG); GPIO_INIT_PIN(GPIOB,1,GPIO_MODE_INPUT_ANALOG); //-------------------------------------------------------------------------------- RCC->APB2ENR |= RCC_APB2Periph_GPIOC; GPIO_INIT_PIN(GPIOC,0,GPIO_MODE_INPUT_ANALOG); GPIO_INIT_PIN(GPIOC,1,GPIO_MODE_INPUT_ANALOG); GPIO_INIT_PIN(GPIOC,2,GPIO_MODE_INPUT_ANALOG); GPIO_INIT_PIN(GPIOC,3,GPIO_MODE_INPUT_ANALOG); //---------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------- ADC1->CR1|=ADC_CR1_SCAN|ADC_CR1_JEOCIE; //---------------------------------------------------------------------------------------------- ADC1->CR1|=(5<<ADC_CR1_DUALMOD_POS); //---------------------------------------------------------------------------------------------- // 000(0): Timer 1 TRGO event // 001(1): Timer 1 CC4 event // 010(2): Timer 2 TRGO event // 011(3): Timer 2 CC1 event // 100(4): Timer 3 CC4 event // 101(5): Timer 4 TRGO event // 110(6): EXTI line15/TIM8_CC4 event (TIM8_CC4 is available only in high-density and XLdensity devices) // 111(7): JSWSTART ADC1->CR2|= (5<<ADC_CR2_JEXTSEL_POS) // 101(5): Timer 4 TRGO event |ADC_CR2_JEXTTRIG*1; //---------------------------------------------------------------------------------------------- // These bits are written by software to define the total number of conversions in the regular // channel conversion sequence. // 0000: 1 conversion // 0001: 2 conversions //ADC1->SQR1|= (3<<ADC_SQR1_L_POS); //---------------------------------------------------------------------------------------------- ADC1->JSQR|=(ADC1_LEN_Inj<<ADC_JSQR_JL_POS); //---------------------------------------------------------------------------------------------- //---------------------------Настраиваем соответствие инжектным каналам------------------------- //---------------------------------------------------------------------------------------------- ADC1->JSQR|=(13<<ADC_JSQR_JSQ1_POS_CH_1); ADC1->JSQR|=(1<< ADC_JSQR_JSQ1_POS_CH_2); ADC1->JSQR|=(2<< ADC_JSQR_JSQ1_POS_CH_3); //ADC1->JSQR|=(4<<ADC_JSQR_JSQ1_POS_CH_4); //---------------------------------------------------------------------------------------------- NVIC_SetPriority(ADC1_2_IRQn,1); //---------------------------------------------------------------------------------------------- NVIC_EnableIRQ(ADC1_2_IRQn); //---------------------------------------------------------------------------------------------- ADC1->CR2|=ADC_CR2_ADON; //---------------------------------------------------------------------------------------------- delay_us(100); ADC1->CR2 |= ADC_CR2_CAL; while(ADC_GetResetCalibrationStatus(ADC1)); //---------------------------------------------------------------------------------------------- } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться