中级会员
 
- 积分
- 268
- 金钱
- 268
- 注册时间
- 2016-7-14
- 在线时间
- 49 小时
|
1金钱
如图,PA1对应了ADC123_IN1。。本人新手,摸索了好几天了。。IN1就是所谓的通道1,意思就是如果我使用PA1口作为接收信号的口,(1)那么配置寄存器的时候只能将这个口设置为ADC1或者2或者3,然后通道只能是1,对么?。。(2)不是说每个ADC都对应了十几个通道么,那么这里为什么只能是一个通道呢?(3)如果哪个大神好心人,帮我看下,我该怎么修改以下一段配置PA1为ADC1的代码。。变成配置PA2为ADC2的效果。我不知道改哪些地方啊void Adc_Init(void){
RCC->APB2ENR|=1<<2;
GPIOA->CRL&=0XFFFFFF0F;
RCC->APB2ENR|=1<<9;
RCC->APB2RSTR|=1<<9;
RCC->APB2RSTR&=~(1<<9);
RCC->CFGR&=~(3<<14);
RCC->CFGR|=2<<14;
ADC1->CR1&=0XF0FFFF;
ADC1->CR1|=0<<16;
ADC1->CR1&=~(1<<8);
ADC1->CR2&=~(1<<1);
ADC1->CR2&=~(7<<17);
ADC1->CR2|=7<<17;
ADC1->CR2|=1<<20;
ADC1->CR2&=~(1<<11);
ADC1->SQR1&=~(0XF<<20);
ADC1->SQR1|=0<<20;
ADC1->SMPR2&=~(7<<3);
ADC1->SMPR2|=7<<3;
ADC1->CR2|=1<<0;
ADC1->CR2|=1<<3;
while(ADC1->CR2&1<<3);
ADC1->CR2|=1<<2;
while(ADC1->CR2&1<<2);
}
u16 Get_Adc(u8 ch)
{
ADC1->SQR3&=0XFFFFFFE0;
ADC1->SQR3|=ch;
ADC1->CR2|=1<<22;
while(!(ADC1->SR&1<<1));
return ADC1->DR;
}
u16 Get_Adc_Average(u8 ch,u8 times)
{
u32 temp_val=0;
u8 t;
for(t=0;t<times;t++)
{
temp_val+=Get_Adc(ch);
delay_ms(5);
}
return temp_val/times;
}
|
-
最佳答案
查看完整内容[请看2#楼]
1,是的 。2,后面的IN2,IN3就是其他通道... 3,配置参考ADC1的即可,知识换ADC123_IN2这个通道。
|