一、查询方式
两个函数,先初始化Init_AD,然后就可以Get_AD开始转换、等待读取;
1.1、初始化Init_AD
void Init_AD()
{
GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_FL_NO_IT); //设置IO为悬浮输入
ADC1_DeInit();
ADC1_Init(ADC1_CONVERSIONMODE_SINGLE,ADC1_CHANNEL_2,
ADC1_PRESSEL_FCPU_D6,ADC1_EXTTRIG_TIM,DISABLE,
ADC1_ALIGN_RIGHT,ADC1_SCHMITTTRIG_CHANNEL2,DISABLE);
ADC1_Cmd(ENABLE); //允许进行AD转换
}
1.2、读取AD值
注意注释中的多通道切换说明;
u16 data = 0;
void Get_AD()
{
//只检测一个通道的话,不用这一句,默认按照Init_AD中配置的通道转换
//如果你想切换别的通道,只用在这里选择不同的通道,就可以转换了
//ADC1_ConversionConfig(ADC1_CONVERSIONMODE_SINGLE,ADC1_CHANNEL_2,ADC1_ALIGN_RIGHT);
ADC1_StartConversion(); //开始AD转换
while(0==ADC1_GetFlagStatus(ADC1_FLAG_EOC)); //等待转换完成
ADC1_ClearFlag(ADC1_FLAG_EOC); //清除AD完成标志位
data = ADC1_GetConversionValue(); //读AD值
}
二、中断方式
2.1、初始化Init_AD
相比查询方式,只多了一句开EOC(end of convert)中断;
void Init_AD()
{
GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_FL_NO_IT); //设置IO为悬浮输入
ADC1_DeInit();
ADC1_Init(ADC1_CONVERSIONMODE_SINGLE,ADC1_CHANNEL_2,
ADC1_PRESSEL_FCPU_D6,ADC1_EXTTRIG_TIM,DISABLE,
ADC1_ALIGN_RIGHT,ADC1_SCHMITTTRIG_CHANNEL2,DISABLE);
ADC1_ITConfig(ADC1_IT_EOCIE,ENABLE); //开启EOC中断
ADC1_Cmd(ENABLE); //允许进行AD转换
}
2.2、开启AD转换
ADC1_StartConversion(); //开始AD转换
2.3、中断服务函数
把stm8s_it.c里面的中断服务函数那一段注释掉,在自己的.c文件里写;
u16 data = 0;
INTERRUPT_HANDLER(ADC1_IRQHandler, 22)
{
ADC1_ClearFlag(ADC1_FLAG_EOC); //清除AD完成标志位
data = ADC1_GetConversionValue(); //读AD值
ADC1_StartConversion(); //开始下一次AD转换
}