ADC1采集通道4、5、6,DMA方式,为什么数据没变化?

2019-07-21 01:58发布

[mw_shl_code=c,true]u16 Buffer[3]={0,0,0};//在ADC文件中定义全局变量 u16 Buffer[3]={0,0,0};//在ADC文件中定义全局变量 //ADC初始化的部分:--------------------------------------------------------------------------- ADC->CCR|=3<<16; //8分频 ADC1->CR1&=~(3<<24); //分辨率12位(15ADCCLK周期) ADC1->CR1|=1<<8; //扫描模式 ADC1->CR2&=~(3<<28); //禁止规则通道的外部触发检测 ADC1->CR2&=~(1<<11); //数据右对齐 ADC1->CR2|=1<<8; //DMA ADC1->CR2|=1<<1; //连续转换模式 ADC1->SQR1|=2<<20; //规则通道转换序列中的转换总数为3(3个转换在规则序列中,也就是转换规则序列1,2,3) ADC1->SMPR2|=7<<12; //通道4采样时间480个周期 ADC1->SMPR2|=7<<15; //通道5采样时间480个周期 ADC1->SMPR2|=7<<18; //通道6采样时间480个周期 ADC1->SQR3|=4; //规则序列中的第一次转换,通道为4 ADC1->SQR3|=5<<5; //规则序列中的第二次转换,通道为5 ADC1->SQR3|=6<<10; //规则序列中的第三次转换,通道为6 ADC1->CR2|=1<<0; //使能ADC1 //--------------------------------------------------------------------------------------------- //还定义一个函数获取通道值----------------------------------------------------------------------- u16 ADC1_Get(u8 channel) { switch(channel) { case 4: return Buffer[0]; case 5: return Buffer[1]; case 6: return Buffer[2]; default: return 0; } } //DMA的配置部分--------------------------------------------------------------------------------- DMA_Streamx->CR=0; //复位配置寄存器 DMA_Streamx->CR|=channel<<25; //通道选择 DMA_Streamx->CR|=0<<23; //存储器突发单次传输 DMA_Streamx->CR|=0<<21; //外设突发单次传输 DMA_Streamx->CR|=1<<16; //优先级中 DMA_Streamx->CR|=1<<13; //存储器数据16位 DMA_Streamx->CR|=1<<11; //外设数据16位 DMA_Streamx->CR|=1<<10; //存储器地址指针递增 DMA_Streamx->CR&=~(1<<9); //外设地址指针固定 DMA_Streamx->CR|=1<<8; //循环模式 DMA_Streamx->CR&=~(3<<6); //外设到存储器 //------------------------------------------------------------------------------------- //主函数文件--------------------------------------------------------------------------------- void main() { float temp; Stm32_Clock_Initial(336,26,2,7); Delay_Initial(168); ADC1_Initial(); DMA_Config(DMA2_Stream0,0,(u32)&ADC1->DR,(u32)Buffer,3); while(1) { ADC1->CR2|=1<<30; //开始转换规则通道 DMA_Enable(DMA2_Stream0,3); //开始一次DMA传输 //等待DMA传输完成,实际应用中,输数据期间,以执行另外的任务 while(1) { if(DMA2->LISR&(1<<5)) //等待DMA2_Steam0传输完成 { DMA2->LIFCR|=1<<5; //清除DMA2_Steam0传输完成标志 break; } } temp=ADC1_Get(4)*3.1/4095; temp=ADC1_Get(5)*3.1/4095; temp=ADC1_Get(6)*3.1/4095; Delay_ms(500); Delay_ms(500); } } [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。