void AD_Init(void)//单次
{
CLK_PeripheralClockConfig(CLK_PERIPHERAL_ADC, ENABLE);//使能fMASTER与外设ADC1连接
ADC1_DeInit();//恢复ADC1寄存器到默认值
ADC1_Init(\
ADC1_CONVERSIONMODE_SINGLE,\
ADC1_CHANNEL_0,\
ADC1_PRESSEL_FCPU_D4,\
ADC1_EXTTRIG_TIM,DISABLE,\
ADC1_ALIGN_RIGHT,\
ADC1_SCHMITTTRIG_CHANNEL0,DISABLE\
);
GPIO_Init(GPIOB, GPIO_PIN_0|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5, GPIO_MODE_IN_FL_NO_IT);
GPIO_Init(GPIOF, GPIO_PIN_4, GPIO_MODE_IN_FL_NO_IT);
}
static u16 Read_AD_NoFilter(u8 chnnel)
{
static u16 u16_adc1_value;
u8 flagstatus,DownCount=0;
u16 temp=0;
ADC1->CSR &= (uint8_t)(~ADC1_CSR_CH); //清通道选择标志位
ADC1->CSR |= (uint8_t)(chnnel); //选择通道
Delay_us(5);
ADC1->CR1 |= ADC1_CR1_ADON; //启动转化
Delay_us(5);
do
{
DownCount--;
flagstatus = (uint8_t)(ADC1->CSR & (uint8_t)0x80);
}
while((flagstatus==0)&&(DownCount!=0));
//while (! ADC1_GetFlagStatus(ADC1_FLAG_EOC));//等待转化结束
ADC1->CSR &= (uint8_t)(~(uint8_t)0x80);
//ADC1_ClearFlag(ADC1_FLAG_EOC); //清除转化结束标志
if(DownCount != 0)
{
temp = ADC1_GetConversionValue();
}
//右对齐格式,必须先读低位,再读高位
//templ = ADC1->DRL;
//temph = ADC1->DRH;
return (temp);
}
|