STM8S AD转换(二)
ight alignment */
{
/* Read LSB first */
templ = ADC1->DRL;
/* Then read MSB */
temph = ADC1->DRH;
temph = (u16)(templ | (u16)(temph << (u8)8));
}
else /* Left alignment */
{
/* Read MSB firts*/
temph = ADC1->DRH;
/* Then read LSB */
templ = ADC1->DRL;
temph = (u16)((u16)(templ << (u8)6) | (u16)(temph << (u8)8));
}
return ((u16)temph);
}
//以下程序是用AN3即PB3进行AD转换,并将AD值放在 u16 ADVal
//初始化时调用:
GPIO_DeInit(GPIOB);
GPIO_Init(GPIOB, GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT);//设置IO为悬浮输入
ADC1_DeInit();
ADC1_Init(ADC1_CONVERSIONMODE_SINGLE,ADC1_CHANNEL_3,\
ADC1_PRESSEL_FCPU_D6,ADC1_EXTTRIG_TIM,DISABLE,\
ADC1_ALIGN_RIGHT,ADC1_SCHMITTTRIG_CHANNEL3,DISABLE);
/*单次转换*/ /*PB3/AN3*/ /*6分频*/ /*内部定时器1 TRG事件*/
/*禁止外部触发转换*/ /*数据右对齐 (低8字节在ADC_DRL寄存器,其余高字节
位在ADC_DRH寄存器)读顺序
应先读低位,再读高位字节*/
ADC1_Cmd(ENABLE);//允许进行AD转换
//进行AD取值时调用:
ADC1_StartConversion();//开始AD转换
while(0==ADC1_GetFlagStatus(ADC1_FLAG_EOC));//等待转换完成
ADC1_ClearFlag(ADC1_FLAG_EOC); //清除AD完成标志位
ADVal = ADC1_GetConversionValue();//读AD值