原子哥,我又来了。
小弟最近想用AD来采集四路语音信号。原子哥的AD程序只有一路的,PA0。原子哥的一路采集程序中 ,这句话:ADC1->SQR3|=ch;是什么意思?
想问下,怎么样用PA0,PA1,PA2,PA3,也就是ADC0,ADC1,ADC2,ADC3来采集AD呢?
原子哥的AD程序如下:
//获得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)
{
//设置转换序列
ADC1->SQR3&=0XFFFFFFE0;//规则序列1 通道ch
ADC1->SQR3|=ch;
ADC1->CR2|=1<<22; //启动规则转换通道
while(!(ADC1->SR&1<<1));//等待转换结束
return ADC1->DR; //返回adc值
}
我在TIMER定时器中断中采集,用的通道1来采集四路AD,定时器中断时间是1S的话,AD可以采,定时器时间为1ms的时候,程序出错,四路AD返回的值都接近于3.3V。IO我都设置过了
RCC->APB2ENR|=1<<2; //使能PORTA口时钟
GPIOA->CRL&=0XFFFF0000;//PA0 1 2 3 anolog输入
void TIM2_IRQHandler(void)
{
if(TIM2->SR&0X0001)//溢出中断
{
adcx0 = Get_Adc(ADC_CH0);
adcx1 = Get_Adc(ADC_CH1);
adcx2 = Get_Adc(ADC_CH2);
adcx3 = Get_Adc(ADC_CH3);
} TIM2->SR&=~(1<<0);//清除中断标志位
}
各位帮小弟出出主意。看应该怎么多路采集AD
|