把我们单片机的ADC配置也发一下出来:
void ADC_Init(void)
{
PB_DDR |= 1<<1;
PB_CR1 |= 1<<1;
//设置PB1为输出模式
PD_DDR &= (~((1<<4)|(1<<5)|(1<<6)));
PD_CR1 &= (~((1<<4)|(1<<5)|(1<<6)));
PD_CR2 &= (~((1<<4)|(1<<5)|(1<<6)));
PB_DDR &= (~(1<<0));
PB_CR1 &= (~(1<<0));
PB_CR2 &= (~(1<<0));
//ADC channel 8,9,10,16
ADCOpen();
ADC1_CR1 = 0x01;
//12-bit resolution /Single conversion mode/ADC enabled
ADC1_CR2 = 0x00;
//f (ADC_CLK) = CK /Sampling time:4 ADC clock cycles
//ADC1_CR3 = 0x1f;
//初始化值
ADC1_TRIGR1 = 0x00;//初始化值
ADC1_TRIGR2 |= (1<<0); //channel 16 Schmitt trigger disabled
ADC1_TRIGR3 |= ((1<<0)|(1<<1)|(1<<2)); //channel 8,9,10 Schmitt trigger disabled
ADC1_SQR1 |= 0x80;//OFF DMA
ADC1_SQR1 &= 0x7F;
ADC1_SQR1 = 0x80;//OFF DMA
ADC1_SQR2 = 0;
ADC1_SQR3 = 0;
ADC1_SQR4 = 0;
ADCClose();
}
void ADCDelay(u32 n)
{
while(!n--);
}
#define ADCOpen() CLK_PCKENR2 |= (1<<0) ; ADC1_CR1 |= (1<<0) //开启ADC,开启ADC时钟
#define ADCClose() ADC1_CR1 &= (~(1<<0)); CLK_PCKENR2 &= (~(1<<0)) //关闭ADC,关闭ADC时钟
s16 ADCGetData_SingleTrans(s8 n)
{
u8 temp = 0x01 << n;
s16 result = 0x0000;
ADCOpen();
ADC1_SQR3 = temp;
ADCDelay(24);
ADC1_CR1 |= (1<<1);//开始转换
while(!(ADC1_SR & (1<<0))); //等待转换结束
result = (s16)(ADC1_DRH << 8) + ADC1_DRL;
ADC1_CR1 &= ~(1<<1);//关闭转换
ADC1_SQR3 = 0x00; //关闭8,9,10通道
ADCClose();
return result;
}
|