中级会员
 
- 积分
- 306
- 金钱
- 306
- 注册时间
- 2014-9-24
- 在线时间
- 39 小时
|
5金钱
[mw_shl_code=c,true] [/mw_shl_code]
[mw_shl_code=c,true]int main(void)
{
u8 t=0;
u8 i=0;
float pro=0;
long int temp0,temp1;
Stm32_Clock_Init(9);
uart_init(72,9600);
delay_init(72);
LED_Init();
LCD_Init();
KEY_Init();
Adc_Init();
MYDMA_Config(DMA1_Channel1,(u32)&ADC1->DR,(u32)AD_Value1,T*N*M);
printf("传输数据长度%x\r\n",DMA1_Channel1->CNDTR);
printf("TEXT_LENTH数值%d\r\n",TEXT_LENTH);
POINT_COLOR=RED;
LCD_ShowString(60,50,200,16,16,"Mini STM32");
LCD_ShowString(60,70,200,16,16,"DMA TEST");
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(60,110,200,16,16,"2014/3/9");
LCD_ShowString(60,130,200,16,16,"KEY0:Start");
// adcx=ADC1->DR;
POINT_COLOR=BLUE;
LCD_ShowString(60,170,200,16,16," %");
pro=DMA1_Channel1->CNDTR;
pro=1-pro/TEXT_LENTH;
pro*=100;
LCD_ShowNum(60,170,pro,3,16);
delay_ms(1000);
ADC1->CR2|=1<<8;//允许dma访问
ADC1->CR2|=1<<0;//开启转换
ADC1->CR2|=1<<3;//初始化复位校准寄存器
while(ADC1->CR2&1<<3);//等待校准结束
ADC1->CR2|=1<<2;//开始AD校准
while(ADC1->CR2&1<<2); //等待校准结束
ADC1->SQR3|=0|(1<<5);//通道0,1以及通道16转换
MYDMA_Enable(DMA1_Channel1); //开启DMA通道1
// TIM3_Int_Init(600,3599);
// TIM3_Int_Init(4999,7199); //当我这一行注释掉的时候,必需有最后一行的while(1);
//否则程序停在标号1的地方,如果不注释掉这一行的时候,最后一行必须有while(1);否则停在标号为1的地方
while(1)
{
ADC1->CR2|=1<<22;
1: while(!(ADC1->SR&1<<1));
ADC1->CR2|=1<<22;
while(!(ADC1->SR&1<<1));
delay_ms(10);
if(DMA1->ISR&(1<<1))
{
DMA1->IFCR|=1<<1;
Average(); //滤波求平均值
while(i<250)
{
temp0=AD_After_Filter [0]*330/4096;
temp1=AD_After_Filter[1]*330/4096; //通道0和1采样电压值放大100倍
USART_RX_BUF[0]=temp0/100+'0'; //放入数组,准备发送到串口
USART_RX_BUF[1]='.';
USART_RX_BUF[2]=temp0/10%10+'0';
USART_RX_BUF[3]=temp0%10+'0';
USART_RX_BUF[4]='V';
USART_RX_BUF[5]=temp1/100+'0';
USART_RX_BUF[6]='.';
USART_RX_BUF[7]=temp1/10%10+'0';
USART_RX_BUF[8]=temp1%10+'0';
USART_RX_BUF[9]='V';
printf("\n");
for(t=0;t<10;t++)
{
USART1->DR=USART_RX_BUF[t];
while((USART1->SR&0X40)==0);
}
printf("\r\n");
i++;
}
break;
}
pro=DMA1_Channel1->CNDTR;
pro=1-pro/TEXT_LENTH;
pro*=100;
LCD_ShowNum(60,170,pro,3,16);
}
LCD_ShowNum(60,170,100,3,16);
printf("ADC完成/r/n");
while(1);
}[/mw_shl_code]
大神们,有什么意见吗?能不能告诉我为什么会这样?
[mw_shl_code=c,true] 注意43,44行的字体[/mw_shl_code]
[mw_shl_code=c,true]画个图辅助一下[/mw_shl_code]
|
|