第一次用ADC测,刚开始选择了原子哥的例子没有DMA,上网查了查多通道采集需要DMA 然后加入了DMA后 CH1的值和以前单通道采集的值不一样 一直在2.4V左右
我感觉 使是我配置的问题。一个人在学校学这个好难 求助,下面是代码
下面是主函数
int main(void)
{
u32 SendBuff[3];
u16 adcx;
float temp;
delay_init(); //Ñóê±oˉêy3õê¼»ˉ
// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éèÖÃÖD¶ÏóÅÏ輶·Ö×éÎa×é2£o2λÇàÕ¼óÅÏ輶£¬2λÏìó|óÅÏ輶
uart_init(115200); //′®¿ú3õê¼»ˉÎa115200
LED_Init(); //LED¶Ë¿ú3õê¼»ˉ
LCD_Init();
Adc_Init(); //ADC3õê¼»ˉ
ADC_DMA_INIT(DMA1_Channel1,(u32)&(ADC1->DR),(u32)SendBuff,1000);//DMA1í¨μà4,íaéèÎa′®¿ú1,′æ′¢Æ÷ÎaSendBuff,3¤¶èSEND_BUF_SIZE.
POINT_COLOR=RED;//éèÖÃ×ÖìåÎaoìé«
LCD_ShowString(60,50,200,16,16,"Elite STM32");
LCD_ShowString(60,70,200,16,16,"ADC TEST");
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(60,110,250,16,16,"2015/1/14");
//ÏÔê¾ìáê¾DÅÏ¢
POINT_COLOR=BLUE;//éèÖÃ×ÖìåÎaà¶é«
LCD_ShowString(60,130,200,16,16,"ADC_CH0_VAL:");
LCD_ShowString(60,150,300,16,16,"ADC_CH0_VOL:0.000V");
LCD_ShowString(60,170,200,16,16,"ADC_CH1_VAL:");
LCD_ShowString(60,190,300,16,16,"ADC_CH1_VOL:0.000V");
LCD_ShowString(60,210,200,16,16,"ADC_CH2_VAL:");
LCD_ShowString(60,230,300,16,16,"ADC_CH2_VOL:0.000V");
while(1)
{
adcx=Get_Adc_Average(ADC_Channel_1,10);
LCD_ShowxNum(156,130,adcx,4,16,0);//ÏÔê¾ADCμÄÖμ
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,150,adcx,1,16,0);//ÏÔê¾μçÑ1Öμ
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,150,temp,3,16,0X80);
LED0=1;
delay_ms(250);
adcx=Get_Adc_Average(ADC_Channel_2,10);
LCD_ShowxNum(156,170,adcx,4,16,0);//ÏÔê¾ADCμÄÖμ
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,190,adcx,1,16,0);//ÏÔê¾μçÑ1Öμ
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,190,temp,3,16,0X80);
LED0=0;
delay_ms(250);
adcx=Get_Adc_Average(ADC_Channel_3,10);
LCD_ShowxNum(156,210,adcx,4,16,0);//ÏÔê¾ADCμÄÖμ
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowxNum(156,230,adcx,1,16,0);//ÏÔê¾μçÑ1Öμ
temp-=adcx;
temp*=1000;
LCD_ShowxNum(172,230,temp,3,16,0X80);
LED1=1;
delay_ms(250);
LCD_ShowxNum(156,250,SendBuff[0],4,16,0);//ÏÔê¾ADCμÄÖμ
}
}
ADC是12位的,你的dma注释的数据位却是8位的。
你的代码配置错误太多,建议你先一条一条的对着
别人的代码对比一下。
其实我也是新手
ADC多通道如果只能DMA那其他没有dma的单片机?。你可以看一下我前段时间
发的求助帖,那里有一种解决思路。
这是我的
void DMA_Configuration(void)
{
DMA_InitTypeDef DMA_InitStructure;
DMA_DeInit(DMA1_Channel1);//½« DMA μÄí¨μà 1¼Ä′æÆ÷ÖØéèÎaè±ê¡Öμ
DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&ADC1->DR;//DMA íaéè»ùμØÖ·
DMA_InitStructure.DMA_MemoryBaseAddr=(u32)ADCData; // DMA Äú′æ»ùμØÖ·
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC; //íaéè×÷Îaêy¾Y′«êäμÄà′Ô′
DMA_InitStructure.DMA_BufferSize=128; //»o′æ′óD¡
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//íaéèμØÖ·¼Ä′æÆ÷2»±ä
DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable; //Äú′æμØÖ·¼Ä′æÆ÷μYÔö
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;//êy¾Y¿í¶èÎa 16 λ
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;//êy¾Y¿í¶èÎa 16 λ
DMA_InitStructure.DMA_Mode=//DMA_Mode_Normal;//1¤×÷ÔúÕy3£»o′æÄ£ê½
DMA_Mode_Circular; //1¤×÷ÔúÑ-»·Ä£ê½
DMA_InitStructure.DMA_Priority=DMA_Priority_High;//DMA í¨μà1óμóD¸ßóÅÏ輶
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable; //ûóDéèÖÃÎaÄú′æμ½Äú′æ′«êä
DMA_Init(DMA1_Channel1,&DMA_InitStructure); //3õê¼»ˉDMA
//DMA_ITConfig(DMA1_Channel1,DMA_IT_TC, ENABLE); //ê1Äü′«êäíê3éÖD¶Ï
//DMA_ClearITPendingBit(DMA1_IT_TC1);
DMA_Cmd(DMA1_Channel1,ENABLE); //ê1ÄüDMA
}
一周热门 更多>