大约是100mv以下 时间约是50ns的尖峰波,我使用单次转换模式,每次转换通道写入ADC_CSR,采样引脚就产生一个尖峰波叠加在我输入的波型。
void Clk_Init(void)
{
CLK_CKDIVR = 0x00; //设为16MHZ
}
void ADC_Init(void)
{
u8 i;
ADC_CR2 = 0x00;
ADC_CR1 |= 0x20;
ADC_CR1 |= 0x01; //开始启动
i=30;
while(i--);
}
u16 ReadAdc(u8 chn)
{
u16 AD_Value;
u8 i;
ADC_CSR &= 0xF0;
ADC_CSR |= (chn-1);
//ADC_CR1 |= 0x01; //开始启动
//i=30;
//while(i--);
ADC_CR1 |= 0x01; //开始转换
while(!(ADC_CSR & 0x80)); //等待转换结束
AD_Value=((((unsigned int)ADC_DRH)<<2)+ADC_DRL);
ADC_CSR &= 0x7F; //清除标志位
//ADC_CR1 &= ~(0x01);
return AD_Value;
}
void main()
{
u16 test;
_asm("sim"); //停止所有中断
Clk_Init();
GPIO_Init(GPIOB, ((u8)0x7F), GPIO_MODE_IN_FL_NO_IT); //需要用到0-6个通道
ADC_TDRL=0x7F;//禁用ADC端口触发器
ADC_Init(); //ADC初始化
_asm("rim"); //开启中断
while(1)
{
test = ReadAdc(1);
test = ReadAdc(2);
}
} |