void InitADC()
{
ADC1->CR1 = 0x20 //漏告分频系数为4 单次转换模式 先不启动ADC转换
ADC1->CR2 = 0x08 //非外部触发 数据右对齐 禁止扫描模式
ADC1->CSR = 0x03 //禁止转换结束中断 设置转换通道为AIN3
ADC1->TDRL|= 0x08 //禁止AIN3施密特触发器功能
ADC1->CR1 |= 0x01 //第一返虚明次写1是从低功耗模式唤醒
}
unsigned int GET_AD()
{
unsigned int temph=0
unsigned char templ=0
ADC1->CR1 |= 0x01 //启誉咐动AD转换
while(!(ADC1->CSR&0x80)) //等待转换结束
ADC1->CSR &= ~0x80 //清除转换结束标志
templ = ADC1->DRL
temph = ADC1->DRH //读出AD转换结果
temph = ConTOINT(temph,templ)
return(temph)
}
程序中使用ADC1采样一个外部输入,一个内部参考电压的电压,其中出现了两通道的数搭陪伏据错位问题,即有时数组第
一个数与该数组第二个数据交换了,在网上找了很久=都
没神知携马结果,最乱升后只能将ADC的连续转换模式设置成单次转换
即ADC_Init(ADC1, ADC_ConversionMode_Continuous, ADC_Resolution_12Bit, ADC_Prescaler_1)改成
ADC_Init(ADC1, ADC_ConversionMode_Single, ADC_Resolution_12Bit, ADC_Prescaler_1)
在每次一组数据传 输完成产生一次DMA中断的时候再启动下
一次adc转换。这样数据才不至于错位。
***最后,如果读者有一些在adc连续转换模式解决数据错位的办法,请指教***
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)