Red de conocimiento informático - Material del sitio web - Cómo utilizar la conversión AD multicanal del microcontrolador STM8S

Cómo utilizar la conversión AD multicanal del microcontrolador STM8S

Te daré una rutina. Tengo dos canales. Uno es para recolectar audio, y luego las luces de colores parpadearán con el ritmo de la música y la energía de la batería se recolectará al mismo tiempo. .

void AD2_Config(void)

{

/* Iniciar GPIO para ADC2 */

GPIO_Init(GPIOB, GPIO_PIN_6, GPIO_MODE_IN_FL_NO_IT) ;

/* De-Init ADC periférico*/

ADC1_DeInit();

ADC1_ClearITPendingBit(ADC1_IT_EOC);

/* Init Periférico ADC1 */

ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_6, ADC1_PRESSEL_FCPU_D18, \

ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL6,\

DISABLE);

/* Habilitar interrupción EOC */

//if(autoFm == 1)

ADC1_ITConfig(ADC1_IT_EOCIE, DISABLE

//else);

// ADC1_ITConfig(ADC1_IT_EOCIE, ENABLE);

/* Habilitar interrupciones generales */

/*Iniciar conversión */

ADC1_StartConversion();

}

void AD_Config(void)

{

/* Iniciar GPIO para ADC2 */

GPIO_Init(GPIOB, GPIO_PIN_7, GPIO_MODE_IN_FL_NO_IT);

// GPIOD-gt; ODR amp; = 0x8f

/* De-Init ADC periférico*/

ADC1_DeInit();

ADC1_ClearITPendingBit(ADC1_IT_EOC);

/* Iniciar periférico ADC1 */

ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_7, ADC1_PRESSEL_FCPU_D18, \

ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL7, \

DISABLE);

/* Habilitar interrupción EOC */

// if(autoFm == 1)

// ADC1_ITConfig(ADC1_IT_EOCIE, DISABLE);

//else

ADC1_ITConfig(ADC1_IT_EOCIE, ENABLE);

/*Iniciar conversión */

ADC1_StartConversion(); >}

principal()

{

TIM2_Config()

TIM4_Config()

AD2_Config; ();

TIM1_Config();

enableInterrupts();

mientras(1)

{

if(ADChange gt; = 1)//Esto es un retraso, con qué frecuencia ingresar

{

AD2_Config();

while(RESET = = ADC1_GetFlagStatus(ADC1_FLAG_EOC));

VoicADLeve = ADC1_GetConversionValue();

AD_Config()

ADChange = 0; = 0;

}

}

}

Dentro de la interrupción ADC

INTERRUPT_HANDLER(ADC2_IRQHandler, 22 )

{

ADC1_ClearITPendingBit(ADC2_IT_EOC);

}

INTERRUPT_HANDLER(ADC1_IRQHandler, 22)

{

uint16_t temp;

temp = ADC1_GetConversionValue(); //Esta es la colección de audio

if(temp lt; min_ad)

{

min_ad = temp

}

if(temp gt; max_ad)

{

max_ad; = temp;

}

ADC1_ClearITPendingBit(ADC1_IT_EOC);

}

Solo te di la parte ADC de este programa

p >