我用了一片 stm8103K3,设计思想的是从AIN0,AIN1两个通道分别读入两路电压值。
可是调试时发现,最后两个通道的值都一样,都为AIN1的值。
这是我的转换代码:
unsigned int CheckADC1(void)
{
unsigned int x;
unsigned int x_h;
CLK_PCKENR2 |=0X8; //使能adc时钟
ADC_CSR |=0X1; //选择通道1 禁止中断
ADC_CR1 |=0X71; //使能ADC,18分频
ADC_CR2 |=0X8; //数据右对齐,low 8BIT AT ADC_DRL;
ADC_CR1 |=0X1; //启动转换
ADC_CSR &= ~0x80; // 清除EOC转换结束标志
ADC_CR1 |= 0x01; // 开始单次转换
while(!(ADC_CSR & 0x80)); //等待转换结束 14个时钟周期
ADC_CSR &= 0X7F; //清除中断标志
x = ADC_DRL; //READ DATA 因为是右对齐所以先读低位
x_h = ADC_DRH;
x_h =( x_h << 8 ) + x;
return x_h;
}
unsigned int CheckADC0(void)
{
unsigned int x;
unsigned int x_h;
CLK_PCKENR2 |=0X8; //使能adc时钟
ADC_CSR |=0X0; //选择通道0 禁止中断
ADC_CR1 |=0X71; //使能ADC,18分频
ADC_CR2 |=0X8; //数据右对齐,low 8BIT AT ADC_DRL;
ADC_CR1 |=0X1; //启动转换
ADC_CSR &= ~0x80; // 清除EOC转换结束标志
ADC_CR1 |= 0x01; // 开始单次转换
while(!(ADC_CSR & 0x80)); //等待转换结束 14个时钟周期
ADC_CSR &= 0X7F; //清除中断标志
x = ADC_DRL; //READ DATA 因为是右对齐所以先读低位
x_h = ADC_DRH;
x_h =( x_h << 8 ) + x;
return x_h;
} |