自己记录一下,以防以后用
uint ADC_ReadValue(uchar channel)
{
uchar i;
static uint ADC_Buf[5];
uint vrefint;
ulong adcValue;
CLK_PCKENR2 = CLK_PCKENR2 | 0X01; //使能外设ADC的时钟,之后对ADC的寄存器操作有效
ADC1_CR1 = 0x01; //开启AD模块电源,使用Sing mode;
ADC1_CR2 = 0X02; //使用MCU系统时钟频率作ADC的时钟;
ADC1_TRIGR1 |= 0x10; //使能内部参考电压
ADC1_SQR1_DMAOFF = 1; //禁止DMA传输;
Delay_ms(5);
for(i = 0; i < 5; i++)
{
// 读取内部参考电压的采样值
ADC1_SQR1 |= 0x10;
ADC1_CR1_START = 1; //启动AD转换
while(ADC1_SR_EOC == 0); //等待AD转换完成。
ADC1_SR_EOC = 0;
vrefint = ADC1_DRH; //右对齐数据
vrefint = (vrefint << 8) | ADC1_DRL; //读取寄存器数据
ADC1_SQR1 = 0x80;
ADC_Buf[i] = (ulong)4096 * 1224 / vrefint;
Delay_us(10);
}
ADC1_SQR2 = 0x00;
ADC1_TRIGR1 = 0x00;
ADC1_CR1 = 0x00; //关闭AD模块电源
CLK_PCKENR2 = CLK_PCKENR2 & 0xFE; //关闭AD时钟
Sort_Detection(ADC_Buf, 5);//取平均值
return ADC_Buf[2];
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』