STM8单片机的多通道连续AD采集
使用的芯片是STM8S207RBT6
ADC的初始化程序
void ADC_Init(void)
{
ADC2_DeInit();
ADC2_StartConversion(); //连续
}
得到对应通道电压
u16 Get_Adc(ADC2_Channel_TypeDef ADC2_Channel)
{
ADC2_Init(ADC2_CONVERSIONMODE_CONTINUOUS , ADC2_Channel, ADC2_PRESSEL_FCPU_D2,\
ADC2_EXTTRIG_TIM, DISABLE, ADC2_ALIGN_RIGHT, ADC2_SCHMITTTRIG_ALL,DISABLE);
ADC2_Cmd(ENABLE); //启动ADC
while(ADC2_GetFlagStatus() == RESET); //等待转换结束
ADC2_ClearFlag(); //清除转换结束标志
return ADC2_GetConversionValue(); //返回ADC结果
}
u16 Read_ADC(ADC2_Channel_TypeDef ADC2_Channel)
{
u16 adc_value;
adc_value = 0;
adc_value = Get_Adc(ADC2_Channel)&0xfff;
return adc_value;
}
主函数
int main(void)
{
u16 ADCData[10];
/*设置内部高速时钟16M为主时钟*/
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
ADC_Init(); //ADC初始化
while(1)
{
ADCData[0] = Read_ADC(ADC2_CHANNEL_1); // 通道1
ADCData[1] = Read_ADC(ADC2_CHANNEL_2); // 通道2
ADCData[2] = Read_ADC(ADC2_CHANNEL_3); // 通道3
ADCData[3] = Read_ADC(ADC2_CHANNEL_4); // 通道4
ADCData[4] = Read_ADC(ADC2_CHANNEL_5); // 通道5
ADCData[5] = Read_ADC(ADC2_CHANNEL_6); // 通道6
}
}