[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]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>