Перейти к содержанию
    

Stm32f103 Injected simultaneous mode

Настроил 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));
//----------------------------------------------------------------------------------------------
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...