[mw_shl_code=c,true] while(1)
{
for(i=1,s=0;i<=1000;i++)
{
adcx1=Get_Adc(ADC_CH0);
s=s+adcx1;
}
adcx1=s/1000;
LCD_ShowNum(156,130,adcx1,4,16);//显示ADC的值
temp1=(float)adcx1*(3.3/4096);
adcx1=temp1;
n=adcx1*100;
LCD_ShowNum(156,150,adcx1,1,16);//显示电压u1值
temp1-=adcx1;
temp1*=100;
m=temp1;
n+=m;
LCD_ShowNum(172,150,temp1,2,16);
adcx2=Get_Adc(ADC_CH1);
LCD_ShowNum(156,170,adcx2,4,16);//显示ADC的值
temp2=(float)adcx2*(3.3/4096);
adcx2=temp2;
LCD_ShowNum(156,190,adcx2,1,16);//显示电压u2值
temp2-=adcx2;
temp2*=1000;
LCD_ShowNum(172,190,temp2,3,16);
adcx3=adcx2;
adcx2=(adcx2/10.4);
LCD_ShowNum(156,210,adcx2,1,16);//显示电流值
temp2=((adcx3*10+temp2/100)/10.4);
temp2*=100;
LCD_ShowNum(172,210,temp2,3,16);
if(USART_RX_STA&0x80)
{
len=USART_RX_STA&0x3f;//得到此次接收到的数据长度
for(t=0;t<len;t++)
{
USART2->DR=USART_RX_BUF[t];
while((USART1->SR&0X40)==0);//等待发送结束
}
USART_RX_STA=0;
}else
{
times++;
if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
if(times%30==0&&n1!=n){n1=n;sprintf(str,"%d",n1);printf("%s\n",str);}
delay_ms(10);
}
}
}[/mw_shl_code]
没有使用USART2时,串口1和AD采集正常。不适用ADC,串口1发,串口2显示正常。采用串口1,串口2,AD采集,串口1发给串口2接收再显示的是乱码。
比如串口1发“2”,串口2显示“?”,串口1发送“6”,串口2显示看不到的汉字。
以上都是使用正点原子的例程,ADC是同时使用0,1,2,3的,串口2是PA2,PA3,所以我想把AD的2,3屏蔽掉。
[mw_shl_code=c,true]修改了:GPIOA->CRL&=0XFFFFFF00;//PA0 1 anolog输入
ADC1->SMPR2&=0XFFFFFF00;//通道0,1,2,3采样时间清空
删掉
ADC1->SMPR2|=7<<9;
ADC1->SMPR2|=7<<6;
#define ADC_CH2 2 //通道0
#define ADC_CH3 3 //通道1[/mw_shl_code]
不知道还要不要改动哪里? |